动画这一章内容比较少,而且之前看的也比较多了。简单总结一下:
7.1 动画类型
7.1.1 View动画
View动画主要分为四种,平移TranslateAnimation、旋转RotateAnimation、缩放ScaleAnimation、透明度AlphaAnimation。这几种动画都是很常见很基本的,就不赘述了。
另外还有帧动画,也就是若干图片一帧帧连续播放,比如我们的开机图片就是帧动画。
7.1.2 View动画的特殊场景
- LayoutAnimation:ViewGroup的子View的入场动画
- Activity切换动画:在startActivity()方法或者finish()之后,调用
overridePendingTransition(int, int)
方法
7.1.3 属性动画
属性动画可以对任何对象使用,包括但不限于View。只要一个对象包含有get和set方法的属性,那么就可以对他使用属性动画。
比如我们写了这么一个类:
public class AnimatorSample {
private float mFloat;
public static void test() {
AnimatorSample sample = new AnimatorSample();
Animator animator = ObjectAnimator.ofFloat(sample, "float", 0, 1);
animator.setDuration(1000);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
float f = sample.getFloat();
System.out.println("float = " + f);
if (f > 0.99999) {
timer.cancel();
}
}
};
timer.schedule(task, 0, 50);
animator.start();
}
public float getFloat() {
return mFloat;
}
public void setFloat(float mFloat) {
this.mFloat = mFloat;
}
}
并调用他的test方法,我们会发现,这个AnimatorSample对象的mFloat从0增加到了1。
animator作用对象
可以看到,Animator的作用对象可以是任何对象。通过传入属性名,经过反射调用这个属性的getter和setter方法来进行取值和赋值。
7.1.4 揭露动画
在API21中,加入了揭露动画。通过调用ViewAnimationUtils.createCircularReveal()
获取到一个Animator对象,其使用方式和普通Animator相同。
7.2 使用动画的注意事项
-
帧动画的OOM
使用帧动画的时候,如果图片较多、较大的时候,容易出现OOM。所以在平时开发中,尽量避免使用帧动画。 -
内存泄漏
属性动画如果设置了无限循环,在退出界面的时候需要停止,否则将出现内存泄漏。 -
动画x点击事件
在View执行TranslateAnimation之后,新位置点击View并不会触发点击事件,而在老位置点击可以触发View的点击事件。使用属性动画避免这种情况,触发点击事件的区域为新位置。
造成这种区别的,是Animation并没有改变View本身的属性,而只是视觉效果;而属性动画是改变了View本身的属性值的。
网友评论