Android 属性动画(PropertyAnimation)详解

ObjectAnimator


Object类可以对对象的任意属性进行操作,列如
View的rotation属性,下面我们通过对ImageViewrotation属性的改变来看看怎么用这个类。代码如下:

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageview, "rotation", 0f, 360f);
objectAnimator.setDuration(3000);
objectAnimator.start();
这是对imageview对象进行0-360的旋转,


如果想要对imageview进行上下翻转,则需要将 rotation 改为 rotatianX,

如果想要对imageview进行左右翻转,则需要将 rotation 改为 rotatianY。


当然你也可以对alpha,scale,translate进行操作。

alpha

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(show, "alpha", 1f, 0f,1f);
 objectAnimator.setDuration(3000);
 objectAnimator.start();

scale

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(show, "scaleX", 1f, 2f,1f);
objectAnimator.setDuration(3000);
objectAnimator.start();

translate

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(show, "translationX", currentX, 500, currentX);
objectAnimator.setDuration(3000);
objectAnimator.start();
组合动画

前面所提到的动画都显得很单一,如果我要透明的同时进行旋转呢?当然了google肯定不会这样简单的问题都想不到。所以google提供了AnimatorSet来实现,这个类提供了一个play()方法。如果我们向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例。

AnimatorSet.Builder中包括以下四个方法:

after(Animator anim)   将现有动画插入到传入的动画之后执行

after(long delay)   将现有动画延迟指定毫秒后执行

before(Animator anim)   将现有动画插入到传入的动画之前执行

with(Animator anim)   将现有动画和传入的动画同时执行
具体使用方式如下:

ObjectAnimator translation = ObjectAnimator.ofFloat(show, "translationX", currentX, 500, currentX);
ObjectAnimator rotation = ObjectAnimator.ofFloat(show, "rotation", 0f, 360f);
ObjectAnimator alpha = ObjectAnimator.ofFloat(show, "alpha", 1f, 0f,1f);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(translation).after(rotation).with(alpha);
animatorSet.setDuration(5000);
animatorSet.start();

XML中编写属性动画

补间动画可以在xml中编写,当然属性动画也可以在xml中编写。要想使用xml编写首先在res目录下面建立一个animator文件夹在xml中我们一共可以使用三种标签。

<animator>  对应代码中的ValueAnimator

<objectAnimator>  对应代码中的ObjectAnimator

<set>  对应代码中的AnimatorSet
我们如果要改变 alpha 属性就可以这样写。

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"

    android:duration="300"
    android:propertyName="alpha"
    android:valueFrom="0f"
    android:valueTo="1f"
    android:valueType="floatType"

 />
复杂的动画也可以用 xml 来编写,这时候需要 set 标签

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">

    <objectAnimator
        android:duration="2000"
        android:propertyName="translationX"
        android:valueFrom="-500"
        android:valueTo="0"
        android:valueType="floatType" />

    <set android:ordering="together">
        <objectAnimator
            android:duration="3000"
            android:propertyName="rotation"
            android:valueFrom="0"
            android:valueTo="360"
            android:valueType="floatType" />

        <set android:ordering="sequentially">
            <objectAnimator
                android:duration="1500"
                android:propertyName="alpha"
                android:valueFrom="1"
                android:valueTo="0"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="1500"
                android:propertyName="alpha"
                android:valueFrom="0"
                android:valueTo="1"
                android:valueType="floatType" />
        </set>
    </set>

</set>
在代码中使用编写好的动画:

Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);  
animator.setTarget(view);  
animator.start();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>