Android动画全篇系列(九)——ViewPropertyAnimator

一、ViewPropertyAnimator简单介绍

这个可怜的动画,它不像CircularReveal一样,有个时髦的中文名字,甚至从来都没有人叫过它的英文名。——鲁迅

为什么它没有中文名字?因为你翻译过来就是:视图属性动画~这不和老大哥重名了嘛?

所以姑且我们称呼它的英文名:维域 · 怕破题 · 俺尼梅特。或许就是因为名字的缘故,这个小伙伴被人慢慢地遗忘……

我们先不翻它的源码,单从名字上来判断:ViewPropertyAnimator有可能是Animator的后代,说不定有些亲戚朋友。

等我们翻它的源码之后,不禁感到悲痛,ViewPropertyAnimator是个孤儿,而且没有兄弟姐妹……

public class ViewPropertyAnimator {
	...
}

再看看其源码,原来是对ValueAnimator的封装……

二、初探

我们来看看生来孤独的ViewPropertyAnimator唯一的构造方法:

    ViewPropertyAnimator(View view) {
        mView = view;
        view.ensureTransformationInfo();
    }

oh,它的构造方法没有用publish修饰,看的出来,是个有点自闭的小青年。

待我们再去找找这个构造方法在哪使用到时,却只发现了一处

	//View.java
	
    public ViewPropertyAnimator animate() {
        if (mAnimator == null) {
            mAnimator = new ViewPropertyAnimator(this);
        }
        return mAnimator;
    }

看来,我们想要和这个自闭的小青年打交道,只能通过View了。

那么我们就可以得出一个结论:只能通过 View.animate() 来进行ViewPropertyAnimator动画

//本例 Demo 使用的 TextView
textView.animate()

当我们再去尝试在上面这行代码后面加个 “.” ,才发现:ViewPropertyAnimator原来是个闷搔货~它提供了很多的关于View的变换方法。
列举
通过这些方法,我们大概可以了解到ViewPropertyAnimator能够做的事情:

  • 位移动画
  • 旋转动画(支持Z、X、Y轴)
  • 缩放动画
  • 透明动画

三、简单使用

这次我们就挑旋转动画吧,代码很简单:

    btn_start.setOnClickListener {
        textView.animate()
            .rotationX(360f)	//咸鱼式的 X 轴翻身
            .setDuration(2000)
    }

效果
其他的动画就不做展示和说明了,我相信聪明的大🔥,能够看到方法就能够会用。

这里要说明一下各个 xxxBy() 方法,以 rotationX() 作为例子,ViewPropertyAnimator还提供了 rotationXBy() 方法。

比如说,我给textView设置一个初始的rotationX = 30,那么textView的初始旋转角度就有了30度

  • 调用 rotationX(),那么textView的转角就会从30度到360度
  • 调用 *rotationXBy(),*那么textView的转角就会从30度到30+360=390度

相信聪明的大🔥一下子就明白了,这个加By的方法,其实就是其offset值。

这里再介绍两个方法:

  • withStartAction(Runnable runnable)
  • withEndAction(Runnable runnable)

你可以调用这两个方法,做些事情,这些动作发生在开始动画前和结束动画后。

四、小结

既然ViewPropertyAnimator是对于ValueAnimator的封装,本着存在即合理,它的存在肯定是有一定的道理。

官方文档是这么介绍的:

如果对于View,你仅仅使用一两个ObjectAnimator是不错的,但是如果设置多个属性,或者只希望用简短的语法,那么ViewPropertyAnimator是个很好的选择。

有一个注意点,那就是该动画是以性能优化为首要,所以牺牲了一些东西,该动画是一次性的,只能调用一次!

所以在我们具体的开发过程中,应该适当的选择技术类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值