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();
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;
<?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();
以上的属性动画的基本使用。
上一篇: Java多线程系列(二十二)Semaphore使用
下一篇: 定点数与浮点数