您的位置:首页 > 移动开发 > Android开发

Android: Resource Type Animation

2016-07-02 16:13 537 查看
概述:Animation Resource 动画资源, 可以定义两种动画类型。 一种是: Property Animation (属性动画), 这是通过改变一个对象的属性值,产生的动画效果。 

 另一种是: View Animation (视图动画) , 这类动画里面又包含了两种动画效果。

1. Tween Animation:通过改变一张图片的 样式,产生的动画效果。

2. Frame Animation:通过多张图片的有序显示达到的动画效果。(就像电影一样, 一帧一帧的播放效果)。

Property Animation (属性动画): 

定义在xml中的动画, 通过修改目标对象的属性值, 比如  background color or alpha。

文件位置: res/animator/filename.xml

资源指向:  
ValueAnimator
ObjectAnimator
,
or 
AnimatorSet
.

引用方式: 1. 在java中:R.animator.filename.xml。
2. 在xml中:@[package:]animator/filename.xml

<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>


文件必须有一个根节点, <set>, <objectAnimation>, <valueAnimator>。 <set>下面可以包含<set>。

下面是每个节点和属性的解释:

<set>:

其他动画属性的容器,  <set>, <objectAnimation>, <valueAnimator>,  代表了AnimatorSet类。

android:ordering

关键字,有两个选项:1. sequentially, 表示按照集合队列播放动画。 2. together,表示所有效果一起进行。

<objectAnimator>:

android:propertyName

String类型, Required (必须要有这个属性)。 在代码中需要通过这个属性引用。比如你可以为一个TextView或者ImageView设置一个backgroudColor属性,和alpha属性在xml文件中。但是属性动画是不能在xml中设置的,只能在java代码中引用,先inflate这个动画xml资源文件, 然后调用loadAnimator()和setTarget()方法为一个对象设置属性动画。

android:valueTo

float, int, or color。Required。

android:valueFrom

float,
int, or color.

android:duration

持续的毫秒数。

android:startOffset

start()方法调用之后, 等待的毫秒数。举例: 这个值写1000, 表示start()方法调用后, 1秒后再执行这个节点下的属性变化。

android:repeatCount

动画重复的次数。

android:repeatMode

动画重复的模式。

android:valueType

关键字。有两个选项。 1. intType。 2. floatType。

<animator>

这个节点下面的属性, 基本和上面的无差别。

实例:

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/ic_launcher" />

</LinearLayout>


属性动画文件: 这个文件要建在
res/animator 文件下, 如果你的res下没有这个文件夹,你要新建一个名为animator的文件夹。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">

<set>
<objectAnimator
android:duration="5000"
android:propertyName="x"
android:valueTo="400"
android:valueType="intType" />

<objectAnimator
android:duration="5000"
android:propertyName="y"
android:valueTo="300"
android:valueType="intType" />
</set>

<objectAnimator
android:duration="5000"
android:propertyName="alpha"
android:valueTo="0f" />
</set>


java代码中使用:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_property);

ImageView image = (ImageView) findViewById(R.id.imageView);

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.simple_animator);
set.setTarget(image);
set.start();
}


效果图:



View Animation (视图动画) :

1. Tween Animation:

文件位置: res/anim/filename.xml

文件指向: Animation类。

引用方式: 1. 在java中, R.anim.filename。 2. 在xml中, @[package:]anim/filename

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>


<set>

根节点, 子节点包含<alpha>, <scale>, <translate>, <rotate>, <set>。代表了AnimationSet类。

android:interpolator

interpolator 资源。

android:shareInterpolator

boolean类型。

<alpha>

淡入和淡出资源, 代表AlphaAnimation类。

android:fromAlpha

float类型, 取值从0.0到1.0, 0.0表示完全透明, 1.0表示完全不透明。

android:toAlpha

float类型, 取值从0.0到1.0, 0.0表示完全透明, 1.0表示完全不透明。

<scale>

表示缩放, 代表ScaleAnimation。

android:fromXScale

float类型,表示x轴上的改变。 1.0表示没变化。

android:toXScale

float类型,表示x轴上的改变。 1.0表示没变化。

android:fromYScale

float类型,表示y轴上的改变。 1.0表示没变化。

android:toYScale

float类型,表示x轴上的改变。 1.0表示没变化。

android:pivotX

中心轴的x点

android:pivotY

中心轴的y点。

<translate>

水平方向或者垂直方向上的移动。

android:fromXDelta

float类型或者百分比。比如 5, 5%, 5p%

android:toXDelta

float类型或者百分比。比如 5, 5%, 5p%

android:fromYDelta

float类型或者百分比。比如 5, 5%, 5p%

android:toYDelta

float类型或者百分比。比如 5, 5%, 5p%

<rotate>

旋转, 代表RotateAnimation

android:fromDegrees

float类型, 起始角度。

android:toDegrees

float类型, 结束角度。

android:pivotX

float类型或者百分比, 中心轴的x

android:pivotY

float类型或者百分比, 中心轴的y

实例:

主布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<ImageView
android:id="@+id/imageView"
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/ic_launcher" />

</LinearLayout>


动画资源文件: 这个文件是放在 res/anim文件夹下面

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:repeatMode="restart"
android:shareInterpolator="false">

<scale
android:duration="5000"
android:fillAfter="false"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.4"
android:toYScale="0.6" />

<set
android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="5000">

<scale
android:duration="2000"
android:fromXScale="1.4"
android:fromYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.0"
android:toYScale="0.0" />

<rotate
android:duration="2000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="-45"
android:toYScale="0.0" />
</set>
</set>


java代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tween_animation);

ImageView imageView = (ImageView) findViewById(R.id.imageView);

Animation animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
if (imageView != null) {
imageView.setAnimation(animation);
} else {
throw new AssertionError();
}
}


效果图:



Frame Animation(帧动画):

文件位置:res/drawable/filename.xml

资源指向:AnimationDrawable类。

引用方式:1. 在java中, R.drawable.filename。 2. 在xml中, @[package:]drawable.filename 这里在xml中引用后面不是 "/" 而是 "." 。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>


<animation-list>

根节点。必须的。

android:oneshot

boolean类型, 是否只播放一次。

<item>

必须是<animation-list>的子节点

android:drawable

drawable资源。

android:duration

持续的毫秒数。

实例:

主布局xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>


帧动画资源文件:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">

<item
android:drawable="@mipmap/images1"
android:duration="1000" />
<item
android:drawable="@mipmap/images2"
android:duration="1000" />
<item
android:drawable="@mipmap/images3"
android:duration="1000" />
<item
android:drawable="@mipmap/images4"
android:duration="1000" />
<item
android:drawable="@mipmap/images5"
android:duration="1000" />
</animation-list>


java代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frame);

ImageView image = (ImageView) findViewById(R.id.imageView);

assert image != null;
image.setBackgroundResource(R.drawable.grils);

AnimationDrawable animation = (AnimationDrawable) image.getBackground();
animation.start();
}


效果图:



好了, 今天的动画基本就这些了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: