Animation动画主要有两种:帧动画(Frame Animation)和补间动画(Tween Animation)。
补间动画主要包括对位置、角度、尺寸等属性的变化,而帧动画则是通过若干帧图片轮流切换显示的。
1、帧动画
按顺序显示事先准备好的图片,跟动漫类似。主要用到的类AnimationDrawable,每个帧都是AnimationDrawable对象。
定义帧动画可以在代码直接进行。也可以通过XML文件定义,定义帧动画的文件存放在res/anim目录下。XML指定帧出现的顺序
及每个帧的持续时间。
帧动画XML主要标记和属性如下:
需要强调的是:启动Frame Animation动画的代码rocketAnimation.start();不能在OnCreate()中,因为在OnCreate()中
AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。这里实在拖曳事件中实现的。
AnimationDrawable的主要方法如下:
帧动画使用例子
完整帧动画XML(frame_ani.xml)代码:
1 <?xml version="1.0" encoding="utf-8"?>
2 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
3 android:oneshot="false">
4 <item android:drawable="@drawable/fish1" android:duration="200" android:visible="true"/>
5 <item android:drawable="@drawable/fish1" android:duration="200" android:visible="true"/>
6 <item android:drawable="@drawable/fish2" android:duration="200" android:visible="true"/>
7 <item android:drawable="@drawable/fish3" android:duration="200" android:visible="true"/>
8 <item android:drawable="@drawable/fish4" android:duration="200" android:visible="true"/>
9 <item android:drawable="@drawable/fish5" android:duration="200" android:visible="true"/>
10 <item android:drawable="@drawable/fish6" android:duration="200" android:visible="true"/>
11 <item android:drawable="@drawable/fish7" android:duration="200" android:visible="true"/>
12 <item android:drawable="@drawable/fish8" android:duration="200" android:visible="true"/>
13 <item android:drawable="@drawable/fish8" android:duration="200" android:visible="true"/>
14 </animation-list>
启动帧动画JAVA代码:
1 @Override
2 public void onClick(View v) { //重写onClick方法
3 ImageView iv = (ImageView)findViewById(R.id.iv);
4 iv.setBackgroundResource(R.anim.frame_ani);
5 AnimationDrawable ad = (AnimationDrawable)iv.getBackground();
6 ad.start(); //启动AnimationDrawable
7 }
点击按钮,启动帧动画,可以看见不同fish图片的切换,鱼儿在游动(自己脑补哈)。
2、补间动画
补间动画作用于View视图,主要包括对View对象的位置、尺寸、旋转角度、透明度的变化。补间动画涉及的类主要有
Animation、AnimationSet等。
补间动画同帧动画可以在代码直接进行。也可以通过XML文件定义,推荐用XML,因为这样可读性比较高和利于扩展。
XML文件存放在res/anim下。
补间动画XML几种变化标记和属性如下:
公有属性如下:
补间动画使用例子:
完整补间动画XML代码:
1 <?xml version="1.0" encoding="utf-8"?><!-- XML的版本以及编码方式 -->
2 <set xmlns:android="http://schemas.android.com/apk/res/android">
3 <alpha
4 android:fromAlpha="0.0"
5 android:toAlpha="1.0"
6 android:duration="6000"
7 /> <!-- 透明度的变换 -->
8 <scale
9 android:interpolator= "@android:anim/accelerate_decelerate_interpolator"
10 android:fromXScale="0.0"
11 android:toXScale="1.0"
12 android:fromYScale="0.0"
13 android:toYScale="1.0"
14 android:pivotX="50%"
15 android:pivotY="50%"
16 android:fillAfter="false"
17 android:duration="9000"
18 /> <!-- 尺寸的变换 -->
19 <translate
20 android:fromXDelta="30"
21 android:toXDelta="0"
22 android:fromYDelta="30"
23 android:toYDelta="0"
24 android:duration="10000"
25 /> <!-- 尺位置的变换 -->
26 <rotate
27 android:interpolator="@android:anim/accelerate_decelerate_interpolator"
28 android:fromDegrees="0"
29 android:toDegrees="+360"
30 android:pivotX="50%"
31 android:pivotY="50%"
32 android:duration="10000"
33 /> <!-- 旋转变换 -->
34 </set>
启动补间动画JAVA代码:
1 @Override
2 public void onClick(View v) { //重写onClick方法
3 ImageView iv = (ImageView)findViewById(R.id.iv);
4 Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.tween_ani);
5 iv.startAnimation(animation); //启动动画
6 }
点击按钮,启动补间动画,可以看见螃蟹从中心慢慢旋转显现出来。