属性动画简单使用
程序员文章站
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(){}
});