Property动画示例

来源:互联网 发布:截面数据多重共线性 编辑:程序博客网 时间:2024/04/29 19:40

1、概述
Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。
View Animation比较简单,支持简单的缩放、平移、旋转、透明度基本的动画,有一定的局限性。比如:你希望View有一个颜色的切换动画;你希望可以使用3D旋转动画;你希望当动画停止时,View的位置就是当前的位置;这些View Animation都无法做到。这就是Property Animation产生的原因。

Drawable Animation叫帧动画,多个图片连续播放,类型gif,用法比较简单。

Property Animation叫做属性动画,故名思议就是通过改变对象的属性的方式实现动画效果,Property功能比另外两种都要强大,目前学会这一种动画,基本就够用了。属性动画本质上就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。下面就property属性动画举个栗子:

重点掌握两个核心类:
ObjectAnimator 动画的执行类(详见例子)
ValueAnimator 动画的执行类(相对复杂)

MainActivity中的代码:

/** * 属性动画(主要通过改变控制点的值,实现动画) */public class MainActivity extends AppCompatActivity {    private ImageView img;    private ObjectAnimator objectAnimator1;    private ObjectAnimator objectAnimator2;    private ObjectAnimator objectAnimator3;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        img = (ImageView) findViewById(R.id.img);        //下面的三个初始化,为了属性动画集合animatorSet()方法准备。        objectAnimator1 = ObjectAnimator.ofFloat(img, "alpha",                new float[]{0.0f, 0.9f, 0.3f, 1.0f});        objectAnimator2 = ObjectAnimator.ofFloat(img, "rotation",                new float[]{0f, 90f, 45f, 180f, 360f, 45f});        objectAnimator2.setDuration(2000);        objectAnimator3 = ObjectAnimator.ofFloat(img, "translationY",                new float[]{0f, 180f, 360f});    }    //点击事件    public void onClick(View view) {        switch (view.getId()) {            case R.id.bt_alpha:                alphaProperty();                break;            case R.id.bt_rotate:                rotateProperty();                break;            case R.id.bt_set:                animatorSet();                break;            default:                break;        }    }    /**     * 1.创建一个ObjectAnimator对象     * 2.设置动画点基本属性     * 3.调用动画的开启方法     */    //透明度动画    private void alphaProperty() {        ObjectAnimator objectAnimatorAlpha = ObjectAnimator.ofFloat(img,//动画设置的控件                "alpha",//view中有的属性方法,此处是设置的透明度,                // 该字符串一定要查询API中存在的属性(最好拷贝过来),                // 后面的数组是改变该属性的数值,有的属性用的是float,有的是int,具体查询api                new float[]{0.0f, 0.9f, 0.3f, 1.0f}//可变参数,对于属性值的改变        );        //设置动画持续时间        objectAnimatorAlpha.setDuration(2000);        //设置动画重复次数        objectAnimatorAlpha.setRepeatCount(1);        //设置动画重复类型,从头开始,原路返回等。        objectAnimatorAlpha.setRepeatMode(Animation.RESTART);        //动画启动        objectAnimatorAlpha.start();    }    //旋转动画    private void rotateProperty() {        ObjectAnimator objectAnimatorRotate = ObjectAnimator.ofFloat(img, "rotation",                new float[]{0f, 45f, 135f, 90f, 45f, 180f});        objectAnimatorRotate.setDuration(2000);        objectAnimatorRotate.setRepeatCount(0);        objectAnimatorRotate.setRepeatMode(Animation.REVERSE);        objectAnimatorRotate.start();    }    //创建一个属性动画集合    //AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等    private void animatorSet() {        AnimatorSet animatorSet = new AnimatorSet();        animatorSet.play(objectAnimator1).with(objectAnimator2).with(objectAnimator3);        animatorSet.setTarget(img);        animatorSet.start();    }}

布局文件中的代码:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.myapplication.property.MainActivity"    >    <Button        android:id="@+id/bt_alpha"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="属性动画透明度"        />    <Button        android:id="@+id/bt_rotate"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="属性动画旋转"        />    <Button        android:id="@+id/bt_set"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="属性动画集合"        />    <ImageView        android:id="@+id/img"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/rose"        /></LinearLayout>

界面展示如下
这里写图片描述

1 0