欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

属性动画简单使用

程序员文章站 2022-05-03 10:36:51
...

1.简介

在补间动画中,只能改变view的绘制效果,不能改变view的属性。举个例子:

一个view从A点移到B点,但是它的属性还在A点,如点击事件。

但是属性动画解决了这个问题。

2.介绍属性动画property animation

我们用到最多的就是, ObjectAnimator 和 AnimatorSet

ObjectAnimator : 控制一个 对象view 和 view的一个属性值 实现动画效果。

AnimatorSet : 将多个ObjectAnimator组合一起使用.

常用的view属性值如下:

translationX , translationY : 控制x,y轴的平移

rotation : 绕Z轴旋转

rotationX , rotationY : 绕X , Y轴旋转

alpha : 透明度

scaleX , scaleY : 缩放

3.代码实现方式:

//代码实现方式
        ObjectAnimator.ofFloat(imag1 , "translationX" , 0 , 300) //以自身位置为坐标系,移动到300
                .setDuration(5000)
                .start();
        //组合
        ObjectAnimator animator1 = ObjectAnimator.ofFloat(imag3 , "translationX" , 0 , 200 , 0); //以自身位置为坐标系,移动到200,在移动到0
        ObjectAnimator animator2 = ObjectAnimator.ofFloat(imag3 , "scaleX" , 1 , 1.5f , 2);
        ObjectAnimator animator3 = ObjectAnimator.ofFloat(imag3 , "rotationX" , 0 , 90 , 0);
        ObjectAnimator animator4 = ObjectAnimator.ofFloat(imag3 , "alpha" , 0 , 0.5f , 1);
        AnimatorSet set = new AnimatorSet();
        set.setDuration(5000);
        set.play(animator2).with(animator3).after(animator4).before(animator1); //自行理解
        set.start();

4.xml资源文件实现方式:

一般的补间view动画xml文件在res.anim下,逐帧动画在drawable下
属性动画也可以写成xml,在res.animator下

//res.animator.donghua.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:duration="3000"
    android:propertyName="scaleX"
    android:valueFrom="1.0f"
    android:valueTo="2.0f"
    android:valueType="floatType"
    >

    
</objectAnimator>
//java调用属性动画xml:(res.animator.donghua.xml)
Animator animator = AnimatorInflate.loadAnimator(this , R.animator.donghua);
animator.setTarget(view);
animator.start();

5.动画监听

动画具有 start , repeat , end , cancel 4个过程 , 监听如下:

ObjectAnimator animator = ObjectAnimator.ofFloat(view , "alpha" , 0 , 1);
animator.addListener(new AnimatorListener() {
    public void onAnimationStart(){}
    public void onAnimationEnd(){}
    public void onAnimationCancel(){}
    public void onAnimationRepeat(){}
});

6.要补充的请自行解决了