As objectAnimator的相关知识

ObjectAnimator 基本使用

常用属性一览:
ObjectAnimator属性
alpha 透明度1~0
translationX X方向移动
translationY Y方向移动
rotation 旋转(默认View中心点)
rotationX X轴旋转(默认View中心横轴)
rotationY Y轴旋转(默认View中心纵轴)
scaleX X缩放 倍数
scaleY Y缩放 倍数
Animatorset 的方法
Animatorset set=new Animatorset()
Set.paly()…
play(anim).after(long delay) 在一定时间后执行play里的动画)
play(anim).after(Animator anim) 先执行after里的动画,再执行play里的动画
play(anim).before(Animator anim) 先执行play里的动画,再执行after里的动画
play(anim).with(Animator anim) 一起执行
下面的 obj就是一个动画在这里插入代码片
ObjectAnimator obj;
obj=ObjectAnimator().ofFloat(imageView,”rotation”,0.0f,360f);
obj.setDuration(int i);//i为多少ms完成这个动画
obj.setRepatcount(int i)//i为重复多少次动画 当i为-1时即无限循环
obj.start();//开始动画
obj.pause()//停止动画;

属性动画包含:
ObjectAnimator 动画的执行类
ValueAnimator 动画的执行类
AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。
AnimatorInflater 用户加载属性动画的xml文件

ObjectAnimator; 由于 ObjectAnimator 是派生自 ValueAnimator 的,所以 ValueAnimator 中所能使用的方法,在 ObjectAnimator 中都可以正常使用。 但 ObjectAnimator 也重写了几个方法,比如 ofInt(),ofFloat()等。我们先看看利用 ObjectAnimator 重写的 ofFloat 方法如何实现一个动画:
改变透明度

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);  
animator.setDuration(2000);  
animator.start(); 

效果图如下:在这里插入图片描述

当点击 start anim 时执行动画从上面的代码中可以看到构造 ObjectAnimator 的方法非常简单:

public static ObjectAnimator ofFloat(Object target, String propertyName, float… values)

第一个参数用于指定这个动画要操作的是哪个控件
第二个参数用于指定这个动画要操作这个控件的哪个属性
第三个参数是可变长参数,这个就跟 ValueAnimator 中的可变长参数的意义一样了,就是指这个属性值是从哪变到哪。像我们上面的代码中指定的就是将 textview 的 alpha 属性从 0 变到 1 再变到 0; 下面我们再来看一下如何实现旋转效果:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotation",0,180,0);  
animator.setDuration(2000);  
animator.start();

效果图如下:在这里插入图片描述
从代码中可以看到,我们只需要改变 ofFloat()的第二个参数的值就可以实现对应的动画; 那么问题来了,我们怎么知道第二个参数的值是啥呢?

我们再回来看构造改变 rotation 值的 ObjectAnimator 的方法

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,“rotation”,0,180,0);

TextView 控件有 rotation 这个属性吗?没有,不光 TextView 没有,连它的父类 View 中也没有这个属性。那它是怎么来改变这个值的呢?其实,ObjectAnimator 做动画,并不是根据控件 xml 中的属性来改变的,而是通过指定属性所对应的 set 方法来改变的。比如,我们上面指定的改变 rotation 的属性值,ObjectAnimator 在做动画时就会到指定控件(TextView)中去找对应的 setRotation()方法来改变控件中对应的值。同样的道理,当我们在最开始的示例代码中,指定改变”alpha”属性值的时候,ObjectAnimator 也会到 TextView 中去找对应的 setAlpha()方法。那 TextView 中都有这些方法吗,有的,这些方法都是从 View 中继承过来的,在 View 中有关动画,总共有下面几组 set 方法:

//1、透明度:alpha
public void setAlpha(float alpha)

//2、旋转度数:rotation、rotationX、rotationY
public void setRotation(float rotation)
public void setRotationX(float rotationX)
public void setRotationY(float rotationY)

//3、平移:translationX、translationY
public void setTranslationX(float translationX)
public void setTranslationY(float translationY)

//缩放:scaleX、scaleY
public void setScaleX(float scaleX)
public void setScaleY(float scaleY)

可以看到在 View 中已经实现了有关 alpha,rotaion,translate,scale 相关的 set 方法。所以我们在构造 ObjectAnimator 时可以直接使用。 在开始逐个看这些函数的使用方法前,我们先做一个总结: 1、要使用 ObjectAnimator 来构造对画,要操作的控件中,必须存在对应的属性的 set 方法 2、setter 方法的命名必须以骆驼拼写法命名,即 set 后每个单词首字母大写,其余字母小写,即类似于 setPropertyName 所对应的属性为 propertyName 下面我们就来看一下上面中各个方法的使用方法及作用。 有关 alpha 的用法,上面已经讲过了,下面我们来看看其它的

(1)、setRotationX、setRotationY 与 setRotation

setRotationX(float rotationX):表示围绕 X 轴旋转,rotationX 表示旋转度数
setRotationY(rotationY):表示围绕 Y 轴旋转,rotationY 表示旋转度数
setRotation(float rotation):表示围绕 Z 旋转,rotation 表示旋转度数

先来看看 setRotationX 的效果:

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotationX",0,270,0);  
animator.setDuration(2000);  
animator.start();

效果图如下:在这里插入图片描述
从效果图中明显看出,textview 的旋转方法是围绕 X 轴旋转的,我们设定为从 0 度旋转到 270 度再返回 0 度。 然后再来看看 setRotationY 的使用方法与效果:

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotationY",0,180,0);  
animator.setDuration(2000);  
animator.start();

效果图如下:在这里插入图片描述

从效果图中明显可以看出围绕 Y 轴旋转的。 我们再来看看 setRotation 的用法与效果:rotation围绕自身中心点转的

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotation",0,270,0);  
animator.setDuration(2000);  
animator.start(); 
 

在这里插入图片描述

(2)、setTranslationX 与 setTranslationY

setTranslationX(float translationX) :表示在 X 轴上的平移距离,以当前控件为原点,向右为正方向,参数 translationX 表示移动的距离。
setTranslationY(float translationY) :表示在 Y 轴上的平移距离,以当前控件为原点,向下为正方向,参数 translationY 表示移动的距离。 我们先看看 setTranslationX 的用法:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "translationX", 0, 200, -200,0);  
animator.setDuration(2000);  
animator.start(); 

效果图如下:在这里插入图片描述
所以,我们上面在构造动画时,指定的移动距离是(0, 200, -200,0),所以控件会从自身所有位置向右移动 200 像素,然后再移动到距离原点-200 的位置,最后回到原点; 然后我们来看看 setTranslateY 的用法:

ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "translationY", 0, 200, -100,0);  
animator.setDuration(2000);  
animator.start(); 

效果图如下:(为了方便看到效果,将 textview 垂直居中)
在这里插入图片描述
同样,移动位置的坐标也都是以当前控件所在位置为中心点的。所以对应的移动位置从原点移动向下移动 200 像素,然后再移动到向下到距原点 200 像素的位置,最后再回到(0,0)从效果图中很明显可以看出来。 从上面可以看出:每次移动距离的计算都是以原点为中心的;比如初始动画为 ObjectAnimator.ofFloat(tv, “translationY”, 0, 200, -100,0)表示首先从 0 移动到正方向 200 的位置,然后再移动到负方向 100 的位置,最后移动到原点。

(3)、setScaleX 与 setScaleY

setScaleX(float scaleX):在 X 轴上缩放,scaleX 表示缩放倍数
setScaleY(float scaleY):在 Y 轴上缩放,scaleY 表示缩放倍数 我们来看看 setScaleX 的用法:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "scaleX", 0, 3, 1);  
animator.setDuration(2000);  
animator.start();

效果图如下:
在这里插入图片描述
在效果图中,从 0 倍放大到 3 倍,然后再还原到 1 倍的原始状态。 然后再来看看 setScaleY 的用法

ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "scaleY", 0, 3, 1);  
animator.setDuration(2000);  
animator.start(); 

为了更好的看到效果,我把 textview 垂直居中了,效果图如下:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值