1、补间动画
补间动画又称为View动画,顾名思义它的作用对象是View,补间动画只需指定动画开始,以及动画结束"关键帧", 而动画变化的"中间帧"则由系统计算并补齐,它支持四种动画方式,补间动画的四种分别对应Animation的四个子类(TranslateAnimation,ScaleAnimation,RotateAnimation,AlphaAnimation),除了以上四个子类它还有一个AnimationSet类,对应xml标签为<set>,它是一个容器,可以包含若干个动画,并且内部也可以继续嵌套<set>集合
补间动画只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000">
<alpha android:fromAlpha="1" android:toAlpha="1"/>
<scale android:fromXScale="0" android:fromYScale="0"
android:toYScale="1" android:toXScale="1"/>
</set>
2、帧动画
帧动画是顺序播放一组预先定义好的图片,不同于补间动画,放置在xml文件下,使用帧动画也会导致app体积增大,一般我不怎么使用。
①. 用于生成连续的Gif效果图。
②. DrawableAnimation也是指此动画。
使用方式
- 在drawable目录下定义XML文件,根节点为animation-list,然后放入定义更好的图片,我这里设置的背景颜色
<?xml version="1.0" encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/a" android:duration="2000"/>
<item android:drawable="@drawable/b" android:duration="2000"/>
<item android:drawable="@drawable/c" android:duration="2000"/>
</animation-list>
2.使用 AnimationDrawable 展示动画
tv.setBackgroundResource(R.drawable.an);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AnimationDrawable background = (AnimationDrawable) tv.getBackground();
background.start();
}
});
3.属性动画
属性动画是从3.0及以后出现的,在3.0以前只有补间动画和帧动画,
比较之前的View动画,属性动画更加丰富、好用;
属性动画是真实地改变控件的属性
常用的动画属性:
- translationX 和 translationY:这两个属性控制了View所处的位置,它们的值是由layout容器设置的,是相对于坐标原点(0,0左上角)的一个偏移量。
- rotation, rotationX 和 rotationY:控制View绕着轴点(pivotX和pivotY)旋转。
- scaleX 和 scaleY:控制View基于pivotX和pivotY的缩放。
- pivotX 和 pivotY:旋转的轴点和缩放的基准点,默认是View的中心点。
- x 和 y:描述了view在其父容器中的最终位置,是左上角左标和偏移量(translationX,translationY)的和。
- aplha:透明度,1是完全不透明,0是完全透明。
//横向平移动画
ObjectAnimator o1 = ObjectAnimator.ofFloat(v, "translationX", 0f,300f);
//设置动画时长
o1.setDuration(500);
//启动动画
o1.start();
//纵向平移动画
ObjectAnimator o2 = ObjectAnimator.ofFloat(v, "translationY", 0f,300f);
o2.setDuration(500);
o2.start();
//旋转动画
ObjectAnimator o3 = ObjectAnimator.ofFloat(v, "rotationX", 0f,360f);
o3.setDuration(500);
o3.start();