Android动画分为帧动画,view动画(个人更喜欢叫补间动画),属性动画(3.0加入)三种。
- 帧动画 像电影一样,播放一组预先定义好的图片。(AnimationDrawable)
- XML定义
- 代码编写
<!-- drawable文件夹下 !-->
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"
android:variablePadding="true"
android:visible="true"
>
<item android:drawable="@mipmap/ic_launcher" android:duration="300"/>
<item android:drawable="@mipmap/ic_launcher" android:duration="300"/>
</animation-list>
oneshot:是否播一次
variablePadding:drawable的padding值是否随当前的状态值改变
visiable:是否可见
代码设置
Button button = (Button) findViewById(R.id.button1);
button.setBackgroundResource(R.drawable.fram_animation);
AnimationDrawable drawbale = (AnimationDrawable) button.getBackground();
drawbale.start();
- View动画
View动画的四种变换效果对应着Animation的四个子类:TranslateAnimation(translate)、ScaleAnimation(scale)、RotateAnimation(rotate)、AlphaAnimation(alpha)。这些既可以通过代码来写,也可以通过XML来定义。
< set> 标签标示动画的集合,对应AnimationSet类。该标签可使用的属性如下图。 - 说明
- interpolator 插值器,@android:anim/xxx 可调用系统的
- fillEnable 是否允许填充
- fillAfter 停留在最后状态
- fillBefore 停留在开始状态
- duration 持续时间
- repeatCount 动画重复次数
- repeatMode 重复模式
- zAdjustment 动画在播放期间,是否调整z轴顺序(top,标示在其他控件上面)
- detacjWallpaper window动画的一个属性,一般没用。
这里的属性就简单了,不说了。
<set>
<scale
...
/>
<..
/>
</set>
接下来看看代码中怎么写。
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);
button.startAnimation(animation);
So eazy 不是么 。
- LayoutAnimation
LayoutAnimation作用于ViewGroup,为ViewGroup置顶动画,这样当它的子元素出场时都会具有这种动画。常常被用于ListView上。咱来看看他又哪些属性
- 说明
- delay 延迟
- animationOrder 动画播放的顺序
这种动画也可以通过XML设置
android:layoutAnimation=""
或者通过代码
listView = (ListView) findViewById(R.id.container);
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);
LayoutAnimationController controller= new LayoutAnimationController(animation);
controller.setDelay(3f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
listView.setLayoutAnimation(controller);
- Activity切换动画
overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
第一个表示进入动画,第二个表示退出动画。需要注意的是:需要在startActivity或者finsh之后才会有效。
- 属性动画 3.0加入
- ValueAnimator 对值进行过度 对应animator标签
- ObjectAnimator 任意对象(需要有对应的set方法) 对应ObjectAnimator标签
上面是ValueAnimator的,ObjectAnimator比他多了一个propetyName属性。关于属性的具体意思就不说了,图里面很清楚。
<?xml version="1.0" encoding="utf-8"?>
<set
android:ordering="together"
xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator />
<animator />
</set>
注意注意注意:这里的set不再像以前那个set,以前那个set对应的是AnimationSet类,这里的AnimatorSet类,一定要注意了。一定要注意了。
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.pro);
set.setTarget(button);
set.start();
关于插值器和估值器,恩,还是看郭霖的吧,
- ObjectAnimation可以对任意属性做动画(前提是有set方法)
- 给你的对象加上get和set方法,如果你有权限的话
- 用一个类来包装原始对象,间接为其提供set和get方法
- 采用valueanimator,监听动画过程,自己实现属性的改变
- 动画监听器
- AnimatorUpdateListener(ValueAnimator类下面)
- AnimatorListener(Animator下面)
剩下的工作原理我就在这里丢人现眼了,看书或者博客。