Android中的动画

1.分类

  • View动画
  • 帧动画
  • 属性动画

2.View动画

View动画的作用对象是View

支持四种效果: TranslateAnimation , ScaleAnimation , RotateAnimation , AlphaAnimation

定义:可以在代码中,也可以在xml文件中(建议)

需要在res目录下新建anim文件夹,对应的标签: set , translate , alpha , roatate , scale

使用: AnimationUtils.loadAnimation(context , id) -> Animation

调用: view.startAnimation();

自定义view动画: 继承Animation , 重写initialize() & applyTransformation() ; 可通过借助Camera来简化矩阵变化。

3.帧动画

帧动画是顺序播放一组预先定义好的图片,相关API: AnimationDrawable

需要在xml文件种定义: ,可作为View的背景 , 通过getBackground()获取AnimationDrawable实例。

4.View动画的特殊使用场景

  • LayoutAnimation
    作用于ViewGroup:子元素出场时的动画效果
    属性: delay:延迟 (0~1) 动画时长相乘 , 第一个动画1 , 第二个动画 2 ….
    animationOrder动画顺序 [normal , reverse , random] , animation 指定动画
    使用: xml中 layoutAnimation ; code 中 LayoutAnimationController.
  • Activity切换效果
    overridePendingTransition(int enterAinm , int exitAnim)
    生效的时期: startActivity() or finish()之后。

5.属性动画

常用类: ValueAnimator , ObjectAnimator , AnimatorSet

特点: 作用对象做了拓展 ; 对动画效果做了拓展

使用: xml 中 animator文件夹 ; code中 ObjectAnimator.ofFloat…

标签 : , , 对应 ValueAnimator

对任意属性做动画

如果想对Object的属性abc做动画,想要动画生效,需要满足两个条件:

  1. 必须提供getAbc() , setAbc()方法
  2. object的setAbc对属性abc所做的改变必须能够通过某种方式反映出来

对button的width属性做动画没有效果?

button内部提供了getWidth() , setWidth()方法

但setWidth()并不是改变视图的大小。

解决方法(三种):

  • 添加get和set方法,如果有权限的
    看似最简单,但不太可行
  • 用一个类包装原始对象,间接为其提供get和set方法
    定义ViewWrapper(demo)
    public class ViewWrapper {

          private View mTarget;

          public ViewWrapper(View mTarget) {
              this.mTarget = mTarget;
          }

          public int getWidth(){
              return mTarget.getLayoutParams().width;
          }

          public void setWidth(int width){
              mTarget.getLayoutParams().width = width;
              mTarget.requestLayout();
          }

      }
  • 采用ValueAnimator,监听动画的过程,自己实现属性的改变
    ValueAnimator valueAnimator = ValueAnimator.ofInt();
      valueAnimator.addUpdateListener(new AnimatorUpdateListener(){

          @override
          public void onAnimationUpdate(ValueAnimator animator){

          }

      })

6.注意事项

  1. OOM(帧动画)
  2. 内存泄漏(属性动画且无限循环,在Activity退出时及时停止)
  3. 兼容性问题

你可能感兴趣的:(Android中的动画)