Android属性动画

628 阅读2分钟

前言

补间动画只是视觉上产生变化,并不是真正的位置上的变化,而属性动画则弥补了补间动画的缺点,真正改变了View的属性,并且可以自定义插值器,实现各种效果。

作用对象

不再局限于视图View对象,可以是任意 Java 对象。

继承关系

View动画的基类是Animation,属性动画的基类是Animator

  • ValueAnimator:这个动画是针对属性的值进行动画的 ,不会对UI造成改变,不能直接实现动画效果。需要通过对动画的监听去做一些操作,在监听中将这个值设置给对应的属性,对应的属性才会改变。

  • ObjectAnimator:直接动画所给的对象,他会调用对象对应属性的get/set方法吧属性的值设置给对象的属性,直接实现动画效果。

  • TimeAnimator:这个也不直接实现动画效果,只是提供一个监听回调,返回动画执行的总时间,距离上次动画执行的时间等(每个16或17ms回调一次方法)。

使用方式

1. ValueAnimator

ValueAnimator只对值进行动画,不会对UI产生实质性的改变,需要添加事件监听,下面是view的透明度动画实例

ValueAnimatorBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(1f,0f);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                view.setAlpha((float) animation.getAnimatedValue());
            }
        });
        valueAnimator.setDuration(1000);
        valueAnimator.start();
    }
});

常见方法

方法名称 含义
valueAnimator.setDuration(); 设置动画时间
valueAnimator.setRepeatCount(); 设置重复次数
valueAnimator.setInterpolator(); 设置插值器
valueAnimator.setRepeatMode(); 设置重复模式
valueAnimator.setStartDelay; 设置延迟

2. ObjectAnimator

ObjectAnimator是ValueAnimator的子集,可以直接对对象属性进行操作,相对而言,使用ObjectAnimator实现动画要更简单。

 ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f);
 animator.setDuration(1000);//时间1s
 animator.start();

常用属性值: AlphaTranslationXTranslationYScaleXRotationRotationXRotationY

ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f);
ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f, 0f);
ObjectAnimator.ofFloat(imageView, "translationX", 0f, -300f, 0f);
ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 2f, 1f);

效果演示

代码

Github demo code