Android 资源简介(六) Property Animation 属性动画

Animator 代表一个属性动画,但它只是一个抽象类,通常会使用它的子类:AnimatorSet、ValueAnimator、ObjectAnimator、TimeAnimator。

定义属性动画的 XML 资源文件能以如下三个元素中的任意一个作为根元素:

  1. <set>:它是一个父元素,用于包含其他<objectAnimator>、<animator>或<set>子元素,该元素定义的资源代表 AnimatorSet 对象;
  2. <objectAnimator>:用于定义 ObjectAnimator 动画;
  3. <animator>:用于定义ValueAnimator动画。

注意:属性动画的 XML 文件应该保存在 /res/animator 目录中。

下面是一个简单的示例:

自定义的 animator 资源文件的代码为:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="backgroundColor"
    android:duration="3000"
    android:valueFrom="#FF8080"
    android:valueTo="#8080FF"
    android:repeatCount="infinite"
    android:repeatMode="reverse"
    android:valueType="intType"
    />

我们的主布局文件的代码很简单,就是一个简单设置属性的空的 LinearLayout,其内容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorGray"
    android:orientation="vertical"
    android:id="@+id/container"
    >

</LinearLayout>

主程序文件的代码如下所示:

package com.toby.personal.testlistview;

import android.animation.AnimatorInflater;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    final private static String TAG = "Toby_Test";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LinearLayout container = (LinearLayout) findViewById(R.id.container);
        container.addView(new TestAnimationView(this));
    }

    public class TestAnimationView extends View {
        public TestAnimationView(Context context){
            super(context);
            ObjectAnimator colorAnim = (ObjectAnimator) AnimatorInflater.loadAnimator(
                    MainActivity.this, R.animator.test_animator01);
            colorAnim.setTarget(this);
            colorAnim.start();
        }
    }

}

本示例的运行效果,各位可以自行运行测试,效果很惊艳耀眼,如果出现运行不了等问题,可以给我留言。本文参考文献:《疯狂Android讲义(第2版)》

    原文作者:赵者也
    原文地址: https://www.jianshu.com/p/af443db0734d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞