第7章 Android动画深入分析

7.1 View动画

  1. View动画的种类:
    1. TranslateAnimation
    2. ScaleAnimation
    3. RotateAnimation
    4. AlphaAnimation
    5. AnimationSet
  2. View动画既可以在res/anim/filename.xml,也可以代码动态创建
  3. 使用动画的方法:
Button mButton = (Button)findViewById(R.id.button1);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation_test);
AlphaAnimation alphaAnimation = new AlphaAnimtaion(0,1);
alphaAnimtaion.setDruation(300);
mButton.startAnimation(animtaion);
mButton1.startAnimtaion(alphaAnimation);
  1. 可以通过setAnimationListener来添加动画的监听
  2. 自定义View动画
    • initialize:初始化工作
    • applyTransformation:相应的矩阵变换
  3. 帧动画 : AnimationDrawable
    一般使用一个xml来定义,使用时
AnimationDrawable drawable = (AnimationDrawable)mButton.getBackground();
drawable.start();

7.2 View动画的特殊使用场景

  1. LayoutAnimtaion
    1. LayoutAnimtaion给ViewGroup的子元素加上出场效果
    2. 可以在xml中制定android:layoutAnimation,也可以使用LayoutAnimtaionController来实现
  2. Activity的切换效果, 当startActvity和finish时
    overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
    
  3. Fragment的切换也可以使用View动画

7.3 属性动画

  1. 属性动画可以对任何对象做动画,而不仅仅是View,甚至可以没有对象。常用的属性动画有ValueAnimator,ObjectAnimator,AnimatorSet
//ObjectAnimator
ObjectAnimator.ofFloat(myObject, "translationY", - myObject.getHeight()).start();

//ValueAnimator
ValueAnimator colorAnim = ObjectAnimator.ofInt(this, "backgroundColor",0xFFFF8080,0xFF8080FF);
colorAnim.setDuration(3000);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.setRepeatCount(ValueAnimator.INFINITE); //动画重复次数
colorAnim.setRepeatMode(ValueAnimator.REVERSE); //动画的重复模式
colorAnim.start();

//AnimatorSet
AnimatorSet set = new AnimatorSet();
set.playTogether(
    ObjectAnimator.ofFloat(myView, "rotationX", 0, 360);
    ObjectAnimator.ofFloat(myView, "rotaitonY", 0, 180);
    ......
);
set.setDuration(5*1000).start();
  1. 属性动画可以用代码实现,也可以用xml实现,建议使用代码实现。
  2. 插值器TimeInterpolator:根据时间流逝的百分比计算出当前属性值改变的百分比
  3. 估值器 TypeEvalutor:根据属性百分比的变化计算当前属性的值
  4. 属性动画的监听器
    1. AnimatorListener:监听动画的开始、结束、取消、重复播放
    2. AnimatorUpdateListener:监听整个过程,每播放一帧,onAnimationUpdate就会调用一次
  5. 属性动画的要求
    1. object必须提供getAbc和setAbc方法
    2. object的setAbc对属性abc的改变必须能通过某些方法反映出来,比如带来UI的改变。
    3. TextView和Button的setWidth/getWidth干的不是一件事情
  6. 保证属性动画生效的三种解决方法:
    1. 给对象加上get/set方法,如果有权限的话(不现实)
    2. 用一个类包装对象,间接提供get/set方法——最现实
    3. 采用ValueAnimator,监听动画过程,自己实现属性改变
  7. ValueAnimator本身不作用于任何对象,直接使用他不会有任何动画效果。

7.4 使用动画的注意事项:

  1. 避免使用帧动画,易OOM
  2. 无限循环的动画,要在Activity退出时及时停止,否则会出现内存泄漏
  3. View动画只改变内容
  4. 尽量使用dp
  5. 建议开启硬件加速

你可能感兴趣的:(第7章 Android动画深入分析)