属性动画(Property Animation)资源

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

     下面介绍属性动画资源。

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

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

     定义属性动画的语法格式如下:

 

<?xml version="1.0" encoding="utf-8"?>

<set android:ordering=["together"|"sequentially"]>
    <set>
        <objectAnimator
            android:propertyName="string"
            android:duration="int"
            android:valueFrom="float|int|color"
            android:valueTo="float|int|color"
            android:startOffset="int"
            android:repeatCount="int"
            android:interpolator=""
            android:repeatMode=["repeate"|"reverse"]
            android:valueType=["intType"|"floatType"]/>
        <objectAnimator
               android:duration="int"
               android:valueFrom="float|int|color"
               android:valueTo="float|int|color"
               android:startOffset="int"
               android:repeatCount="int"
               android:interpolator=""
               android:repeatMode=["repeat"|"reverse"]
                 android:valueType="intType"/>
    </set>
   <set>
       ...
   </set>
</set>

实例:不断渐变的背景色

   该实例将会使用属性动画来控制组件背景色不断改变。该实例所使用的属性动画资源文件如下。

   程序清单:\res\animator\color_anim.xml

<?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" >
</objectAnimator>

上面的代码定义了一个ObjectAnimator对象,接下来程序就可以通过属性动画来控制指定组件背景色不断改变。

该实例的布局文件如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/container"
    >

</LinearLayout>

 

下面是该实例的Activity代码。

package com.example.studyresources;

import android.os.Bundle;
import android.animation.AnimatorInflater;
import android.animation.ArgbEvaluator;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.LinearLayout;

public class AnimatorTest extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animator_test);
        LinearLayout container=(LinearLayout)findViewById(R.id.container);
        //添加MyAnimationView组件
        container.addView(new MyAnimationView(this));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.animator_test, menu);
        return true;
    }
    
    public class MyAnimationView extends View
    {
        public MyAnimationView(Context context)
        {
            super(context);
            //加载动画资源
            ObjectAnimator colorAnim=(ObjectAnimator)AnimatorInflater.loadAnimator(
                    AnimatorTest.this,R.animator.color_anim);
            colorAnim.setEvaluator(new ArgbEvaluator());
            //对该View本身应用属性动画
            colorAnim.setTarget(this);
            //开始指定动画
            colorAnim.start();
            
        }
    }

}

上面的程序中粗体字代码使用AnimatorInflater工具类加载了指定动画资源文件、将该动画资源文件转换为ObjectAnimator对象。接下来程序对MyAnimationView本身应用该动画,将可以看到该组件的背景色不断变化,如图6.8所示。

 

posted @ 2013-11-23 16:14  TealerProg  Views(402)  Comments(0Edit  收藏  举报