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

Android开发 之 属性动画

程序员文章站 2024-03-25 23:46:46
...

属性动画

属性动画是android3.0以后才有的,而且是真是改变组件的真是属性。而补间动画只是改变界面的绘制位置,组件的真实位置没有改变的。属性动画每个动画只能改变组件的一个属性,想改多个属性必须执行多个属性动画。

1. 平移动画:这是改变Y轴的,把第二个参数改成translationX的话就是改变x轴的动画。
//第一个参数作用在那个组件,第二个要改变组件的属性名称,第三个可变参数运动到10,在到50,在到100,在返回到40,组件的运动开始坐标视为0
ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationY", 10, 50, 100,40);
oa.setDuration(1000);
oa.setRepeatCount(1);
oa.setRepeatMode(ValueAnimator.REVERSE);
oa.start();

2.缩放动画,缩放动画不能改变视图的坐标。可以理解成假的属性动画;
view的setTop()也是不能改变view的坐标的;setX(),LayoutParams是可以改变坐标的;
但是通过属性动画改变top值,view的坐标也发生了变化,view的尺寸也变化 了;
//第一个参数作用在那个组件,第二个要改变组件的属性名称,第三个可变参数缩放倍数
                ob = ObjectAnimator.ofFloat(iv,"scaleX",1, 3,2,1);
                ob.setDuration(2000);
                ob.start();

3. 透明动画
                //第一个参数作用在那个组件,第二个要改变组件的属性名称,第三个可变参数透明的倍数
                oc = ObjectAnimator.ofFloat(iv,"alpha",0.2f, 0.8f,0.4f,1);
                oc.setDuration(2000);
                oc.start();

4.旋转动画
 //第一个参数作用在那个组件,第二个要改变组件的属性名称rotation,rotationX,rotationY,第三个可变参数旋转的角度
                od = ObjectAnimator.ofFloat(iv,"rotation",0,45, 90,360);
                od.setDuration(2000);
                od.start();

5.一起飞
                AnimatorSet as=new AnimatorSet();
//                as.playSequentially(oa,ob,oc,od);//挨个飞
                as.playTogether(oa,ob,oc,od);//一起飞。
                as.start();
                break;

6.属性动画也可以使用xml定义,在res目录下创建Animator文件夹
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator android:propertyName="translationY"
        android:duration="1000"
        android:valueFrom="-100"
        android:valueTo="100"
        android:repeatCount="1"
        android:repeatMode="reverse">
    </objectAnimator>
</set>

Animator animator = AnimatorInflater.loadAnimator(this, R.animator.objectanimator);
                animator.setTarget(iv);
                animator.start();

7.多属性一起制定动画
        //keyframe
        Keyframe keyframe1 = Keyframe.ofFloat(0.0f,0);
        Keyframe keyframe2 = Keyframe.ofFloat(0.25f,-30);
        Keyframe keyframe3 = Keyframe.ofFloat(0.5f,0);
        Keyframe keyframe4 = Keyframe.ofFloat(0.75f, 30);
        Keyframe keyframe5 = Keyframe.ofFloat(1.0f,0);
        PropertyValuesHolder rotation = PropertyValuesHolder.ofKeyframe("rotation", keyframe1, keyframe2, keyframe3, keyframe4,keyframe5);

        PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat("alpha",1.0f,0.2f,1.0f);
        PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX",1.0f,0.2f,1.0f);
        PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY",1.0f,0.2f,1.0f);
        PropertyValuesHolder color = PropertyValuesHolder.ofInt("BackgroundColor", 0XFFFFFF00, 0XFF0000FF);

        ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(mButton, alpha, scaleX, scaleY,color,rotation);
        animator.setInterpolator(new OvershootInterpolator());
        animator.setDuration(5000).start();

以上的属性动画的基本使用。