Android开发艺术探索读书笔记 第七章 Android动画深入分析

7.1 view动画

View动画,有4种,平移、选择、缩放、透明度动画。

可以通过接口AnimationListener监听动画。

7.1.2 自定义动画

继承Animation抽象类,重写initalize和applyTransformation方法。

在applyTransformation进行矩阵变换,可以实现3D效果。

7.1.3 帧动画

使用AnimationDrawable实现帧动画。

创建标签,

然后

mButton.setBackGroundResource(R.drawable.frame_animation);

AnimationDrawable drawable = (AnimationDrawable)mButton.getBackGround();

drawable.start();

使用简单,但是容易OOM,尽量避免使用过多尺寸较大的图片。

7.2 View动画的特殊使用场景

7.2.1 LayoutAnimation

可以为ViewGroup的子元素指定动画。

7.2.2 Activity的切换效果

通过overridePendingTransition(int enterAnim, int exitAnim)方法。

必须在startActivity或finish方法之后被调用。

fragment可以通过

FragmentTransition的setCustomAnimations方法添加动画。

7.3 属性动画

默认时间300ms,默认帧率10ms/帧。

从API 11之后才能使用,之前可以使用nineoldandroid来实现属性动画。

xml属性动画需要定义在res/animator下

ObjectAnimator继承自ValueAnimator,AnimatorSet是动画合集。

标签的ordering属性如果设为together,则所有动画同时开始播放。

如果是sequentially,则依次播放。默认为together。

对应ValueAnimator

对应ObjectAnimator

少一个propertyName属性

android:valueType表示propertyName的类型,有intType喝floatType两种,如果是颜色则不需要指定,系统自动处理。

android:repeatCount默认为0,-1表示无限循环。

使用方式:

Animator set = (Animator) AnimatorInflater.loadAnimatior(mContext, R.anim.animator);

set.setTarget(btn);

set.start();

7.3.2 插值器和估值器

系统预置的TimeInterpolator有:

LinearInterpolator线性插值器

AccelerateDecelerateInterpolator加速加速插值器

DecelerateInterpolator减速插值器

TypeEvaluator类型估值器

系统预置的有IntEvaluator、FloatEvaluator、ArgbEvaluator(针对颜色)

7.3.3 属性动画的监听器

主要有2个接口:
AnimatorUpdateListener和AnimatorListener。
同时提供AnimatorListenerAdapter类,可以部分实现需要的方法。

7.3.4 对任意属性做动画

对对象object的属性abc做动画,必须要满足:

  1. object必须提供setAbc方法。如果动画的时候没有传递初始值,还要提供getAbc方法,因为系统要去取abc属性的初始值,如果不满足,直接crash。
  2. object的setAbc对属性abc所做的改变必须能够通过某种方式反映出来,比如改变UI,如果不满足,动画无效果。

Button的setWidth方法实际是属于TextView的,不能用来设置宽度。
解决方法:

  1. 如果有权限,给对象加上get、set方法。
  2. 用一个类包装原始对象,间接提高get、set方法。(wrapper模式)
  3. shiy ValueAnimator,监听动画过程,自己实现属性改变。

7.3.5 属性动画的工作原理

通过反射调用get和set方法。

7.4

使用动画的注意事项

  1. 避免使用帧动画,当图片数量多并且较大时容易OOM。
  2. 内存泄露,无限循环的动画需要在activity退出时停止,否则会内存泄露。view动画不存在此问题。
  3. 3.0以下无法使用属性动画,可以使用nineoldandroid。
  4. view动画是对view的影像做动画。如果view动画完成后无法隐藏,即setVisibility(View.GONE)失效,可以调用view.clearAnimation清除view动画解决。
  5. 动画过程中不要使用px而是使用dp,否则在不同dpi设备会有不同效果。
  6. 3.0之前,view动画或者属性动画平移后,都不能再新位置点击。3.0之后,属性动画点击位置为平移后,view动画在平移前。
  7. 建议开启硬件加速提供动画流畅性。
文章目录
  1. 1. 7.1 view动画
    1. 1.1. 7.1.2 自定义动画
    2. 1.2. 7.1.3 帧动画
  2. 2. 7.2 View动画的特殊使用场景
    1. 2.1. 7.2.1 LayoutAnimation
    2. 2.2. 7.2.2 Activity的切换效果
  3. 3. 7.3 属性动画
    1. 3.1. 7.3.2 插值器和估值器
    2. 3.2. 7.3.3 属性动画的监听器
    3. 3.3. 7.3.4 对任意属性做动画
    4. 3.4. 7.3.5 属性动画的工作原理
  4. 4. 7.4
,