【Android 开发】属性动画(Property Animation)详解

引言

学习完上一篇Android 开发】补间动画(Tween animation)详解,我们最后来学习属性动画。


内容简概

一、概念及常用方法
二、实战案例
三、运行效果

具体内容

一、概念及常用方法

你可能会有这样的疑问:为什么要引入属性动画?属性动画是什么?

(一)ValueAnimation

看完文章相信你肯定对属性动画有了初步的了解,一般使用ValueAnimator实现动画分为以下七个步骤:

      使用步骤
1. 调用ValueAnimation类中的ofInt、ofFloat等静态方法实例化ValueAnimator对象,并设置目标属性的属性名、初始值或结束值等值。
2. 调用addUpdateListener方法设置属性变化的监听器。
3. 创建自定义的Interpolator,调用setInterpolator设置自定义的Interpolator。
4. 创建自定义的TypeEvaluator,调用setEvaluator设置自定义的TypeEvaluator。
5. 在AnimatorUpdateListener 中的实现方法为目标对象的属性设置计算好的属性值。
6. 设置动画的持续时间、是否重复及重复次数等属性。
7. 设置目标对象并启动动画。
(二)ObjectAnimation

在大部分的开发工作中,都会使用ObjectAnimator而非ValueAnimator实现我们所需的动画效果。ObjectAnimator是ValueAnimator的子类,不仅继承了ValueAnimator的所有方法和特性,并且还封装很多实用的方法,方便开发人员快速实现动画。同时,由于属性值会自动更新,使用ObjectAnimator实现动画不需要像ValueAnimator那样必须实现ValueAnimator.AnimatorUpdateListener 。

      使用步骤
1. 通过调用ofFloat()、ofInt()等方法创建ObjectAnimator对象,并设置目标对象、需要改变的目标属性名、初始值和结束值;
2. 设置动画的持续时间、是否重复及重复次数等属性;
3. 启动动画。

(三)属性

系统属性
alpha
scaleX
scaleY
translationX
translationY
自定义属性必须实现set get方法

二、实战案例

(一)ValueAnimation

它有两个子类,分别是TimeAnimator和ObjectAnimator,在此主要介绍它的子类ObjectAnimator。
ValueAnimation案例

(二)ObjectAnimator——实现透明度、旋转、平移、缩放动画

1. 准备一张图片或者直接在xml中设置有颜色的形状。
2. 首先配置布局文件,这次就不写Button控件了(懒)。



   

3. MainActivity
通过改变调用的方法观察不同的动画。

public class MainActivity extends AppCompatActivity {
    View v;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        v = findViewById(R.id.v);
    }

    // 透明度
    public void test1(){
        ObjectAnimator alphyAni = ObjectAnimator.ofFloat(v,"alpha",1,0);
        alphyAni.setDuration(1000);
        alphyAni.start();
    }

    // 旋转
    public void test2(){
        ObjectAnimator rotateAni = ObjectAnimator.ofFloat(v,"rotation",0,360);
        rotateAni.setDuration(1000);
        rotateAni.start();
    }

    public void test3(){
        ObjectAnimator scaleAni = ObjectAnimator.ofFloat(v,"scaleX",1,2.1f,1,2.1f,1);
        scaleAni.setDuration(1000);
        scaleAni.start();

//        ObjectAnimator scaleAni2 = ObjectAnimator.ofFloat(v,"scaleY",1,2.3f,1,2.3f,1);
//        scaleAni2.setDuration(1000);
//        scaleAni2.start();

        // 同时动画
//        AnimatorSet aSet = new AnimatorSet();
//        aSet.playTogether(scaleAni,scaleAni2);
//        aSet.play(scaleAni).after(scaleAni2);
//        aSet.start();
    }

    // 平移
    public void test4(){
        ObjectAnimator transAnim = ObjectAnimator.ofFloat(v,"translationX",v.getTranslationX()+100);
        transAnim.setDuration(1000);
        transAnim.start();
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN){
            test3();
        }
        return true;
    }
}

4. 我写的实战比较简单了,可以看下面的几篇拓展文章:

  • 使用 ObjectAnimator 实现四种动画
  • 自定义控件三部曲之ObjectAnimator
  • 属性动画完全解析

三、运行效果

  • 旋转


  • 平移


  • 透明度


  • 缩放


  • 组合(先后)


  • 组合(同时)


你可能感兴趣的:(【Android 开发】属性动画(Property Animation)详解)