android动画:
3.0以前,android支持两种动画模式,tween animation,frame animation,
3.0中又引入了一个新的动画系统:property animation,
这三种动画模式在SDK中被称为
property animation, 属性动画:
view animation, 补间动画: 给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。
(Tween animation)
drawable animation。 帧动画: 就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果(Frame animation)
一、View Animation 补间动画
1.创建布局文件---》res--》anim--->设置效果
2.在代码中:
1)初始化Animation对象 通过AnimationUtils.loadAnimation(上下文,布局文件);
2)给控件设置动画的效果: view.startAnimation();
用XML定义的动画放在/res/anim/文件夹内,
XML文件的根元素可以为(淡入淡出, 缩放, 平移, 旋转,xx, 集合 )
<alpha>,<scale>,<translate>,<rotate>,interpolator元素或<set>(表示以上几个动画的集合,set可以嵌套)。
默认情况下,所有动画是同时进行的,可以通过startOffset属性设置各个动画的开始偏移(开始时间)来达到动画顺序播放的效果。
可以通过设置interpolator属性改变动画渐变的方式,如AccelerateInterpolator,
开始时慢,然后逐渐加快。默认为AccelerateDecelerateInterpolator。
定义好动画的XML文件后,可以通过类似下面的代码对指定View应用动画。
public class MainActivity extends Activity { private Animation animation; private ImageView iv; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.imageView1); //初始化Animation对象 animation = AnimationUtils.loadAnimation(this, R.anim.rotate); //设置动画效果 iv.startAnimation(animation); }}
alpha.xml, 淡入淡出 <alpha /> 设置属性
<?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" //动画的执行时间 android:fromAlpha="0" //开始的透明度 android:repeatCount="5" //重复的次数 android:toAlpha="2" > //结束的透明度 </alpha>
rotate.xml 旋转
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromDegrees="0" android:pivotX="0" android:pivotY="0" android:repeatCount="-1" android:toDegrees="360" > </rotate>
缩放 scale.xml
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="4000" android:fromXScale="0" android:fromYScale="0" android:repeatCount="5" android:toXScale="2" android:toYScale="2" > </scale>
平移 traslate.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fromXDelta="0" android:fromYDelta="0" android:repeatCount="3" android:toXDelta="200" android:toYDelta="200" > </translate>
集合:set.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fromAlpha="0" android:repeatCount="5" android:toAlpha="2" /> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromDegrees="0" android:pivotX="50" android:pivotY="50" android:repeatCount="-1" android:toDegrees="360" > </rotate> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="4000" android:fromXScale="0" android:fromYScale="0" android:repeatCount="5" android:toXScale="2" android:toYScale="2" > </scale> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fromXDelta="0" android:fromYDelta="0" android:repeatCount="3" android:toXDelta="200" android:toYDelta="200" > </translate> </set>
另外可以不使用xml文件,直接设置属性
Animations extends Object implements Cloneable
使用TweenedAnimations的步骤:
1.创建一个AnimationSet对象(Animation子类);
2.增加需要创建相应的Animation对象;
3.更加项目的需求,为Animation对象设置相应的数据;
4.将Animatin对象添加到AnimationSet对象当中;
5.使用控件对象开始执行AnimationSet。
Tween Animations的通用方法
1、setDuration(long durationMills) 设置动画持续时间(单位:毫秒)
2、setFillAfter(Boolean fillAfter) 如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态
3、setFillBefore(Boolean fillBefore) 如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态
4、setStartOffSet(long startOffSet) 设置动画执行之前的等待时间
5、setRepeatCount(int repeatCount) 重复的次数
Animation的四个子类:
AlphaAnimation、TranslateAnimation、ScaleAnimation、RotateAnimation
四、具体实现
AlphaAnimation:
//1.创建一个AnimationSet对象(Animation子类); AnimationSet aset = new AnimationSet(true); //2.增加需要创建相应的Animation对象;1表示完全不透明,0表示完全透明 AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0); //3.更加项目的需求,为Animation对象设置相应的数据; alphaAnimation.setDuration(3000);//设置动画的执行时间 alphaAnimation.setRepeatCount(1); //4.将Animatin对象添加到AnimationSet对象当中; aset.addAnimation(alphaAnimation); //5.使用控件对象开始执行AnimationSet iv.startAnimation(aset);//注意执行的是AnimationSet(Animation子类)
RotateAnimation
//1.创建一个AnimationSet对象(Animation子类); AnimationSet aset = new AnimationSet(true); //2.增加需要创建相应的Animation对象; RotateAnimation animaiton = new RotateAnimation( 0, //旋转开始角度 360, //结束角度 //确定x轴坐标的类型:有ABSOLUT绝对坐标、RELATIVE_TO_SELF相对于自身坐标、RELATIVE_TO_PARENT相对于父控件的坐标 Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //3.更加项目的需求,为Animation对象设置相应的数据; animaiton.setDuration(3000);//设置动画的执行时间 animaiton.setRepeatCount(1); //4.将Animatin对象添加到AnimationSet对象当中; aset.addAnimation(animaiton); //5.使用控件对象开始执行AnimationSet iv.startAnimation(aset);
ScaleAnimation
//1.创建一个AnimationSet对象(Animation子类); AnimationSet aset = new AnimationSet(true); //2.增加需要创建相应的Animation对象; //参数1:x轴的初始值 //参数2:x轴收缩后的值 //参数3:y轴的初始值 //参数4:y轴收缩后的值 //参数5:确定x轴坐标的类型 //参数6:x轴的值,0.5f表明是以自身这个控件的一半长度为x轴 //参数7:确定y轴坐标的类型 //参数8:y轴的值,0.5f表明是以自身这个控件的一半长度为x轴 ScaleAnimation animaiton = new ScaleAnimation( 0, 0.1f, 0, 0.1f, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f); //3.更加项目的需求,为Animation对象设置相应的数据; animaiton.setDuration(3000);//设置动画的执行时间 animaiton.setRepeatCount(1); //4.将Animatin对象添加到AnimationSet对象当中; aset.addAnimation(animaiton); //5.使用控件对象开始执行AnimationSet iv.startAnimation(aset);
TranslateAnimation
//1.创建一个AnimationSet对象(Animation子类); AnimationSet aset = new AnimationSet(true); //2.增加需要创建相应的Animation对象; //参数1~2:x轴的开始位置 //参数3~4:y轴的开始位置 //参数5~6:x轴的结束位置 //参数7~8:x轴的结束位置 TranslateAnimation animaiton = new TranslateAnimation( Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,0.5f); //3.更加项目的需求,为Animation对象设置相应的数据; animaiton.setDuration(3000);//设置动画的执行时间 animaiton.setRepeatCount(1); animaiton.setFillAfter(true); //4.将Animatin对象添加到AnimationSet对象当中; aset.addAnimation(animaiton); //5.使用控件对象开始执行AnimationSet iv.startAnimation(aset);