Android动画(二):视图动画、属性动画

Catalogue
  1. 1 LayoutAnimation的局限性
  2. 2 动画监听方法归类
  3. 3 AnimationDrawable的使用时机

笔者已将本节的代码上传至Github,大家可以结合着学习。
本篇以文章《Android 动画:这是一份详细 & 清晰的动画学习指南》为基础,笔者在通读了这篇文章并进行了必要的代码实操后觉得有三个知识点需要补充,所以本篇将记录下这三个知识点。

1 LayoutAnimation的局限性

LayoutAnimation 只在创建 ViewGroup 的时候生效,后续添加的子 View 是没有动画效果的。这和 LayoutTransition 有很大的区别,在后续介绍布局动画时再展开介绍。

2 动画监听方法归类

1、转场动画相关
Animation.setAnimationListener(Animation.AnimationListener listener);
2、属性动画相关
Animator.addListener(AnimatorListenerAdapter adapter);
Animator.addListener(Animator.AnimatorListener listener);
Animator.addPauseListener(Animator.AnimatorPauseListener listener);
Animator.addUpdateListener(ValueAnimator.AnimatorUpdateListener listener);
3、ViewPropertyAnimator动画相关
ViewPropertyAnimator.setListener(AnimatorListenerAdapter adapter);
ViewPropertyAnimator.setListener(Animator.AnimatorListener listener);
ViewPropertyAnimator.setUpdateListener(AnimatorUpdateListener listener);
ViewPropertyAnimator.withEndAction(Runnable runnable);
ViewPropertyAnimator.withStartAction(Runnable runnable);

** 注意 **
withStartAction() / withEndAction() 是一次性的,在动画执行结束后就自动弃掉了,就算之后再重用 ViewPropertyAnimator 来做别的动画,用它们设置的回调也不会再被调用。而 set/addListener() 所设置的 AnimatorListener 是持续有效的,当动画重复执行时,回调总会被调用。

参考链接>>

3 AnimationDrawable的使用时机

AnimationDrawable 的 start 方法不能在你的 Activity 的onCreate()中使用,否者会没有效果,因为这个时候 AnimationDrawable 还没有绑定到窗口。如果你想在进入页面后立即开始动画,可以在你的 Activity 的onStart()方法中调用。当然,你也可以在交互监听中调用 start 方法,比如在某个 View 的onClick()方法中调用。