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

Android 属性动画之自动优化的动画- ViewPropertyAnimator

程序员文章站 2022-03-02 20:24:37
...

ViewPropertyAnimator 可为View对象上的选择属性提供自动优化的动画。

应用场景如下

#1. 如果仅对View对象的一个​​或两个属性进行动画处理,则可以使用ObjectAnimator;ObjectAnimator调用的属性设置器已做好充分的准备,可以正确地设置属性并使视图无效。

##2. 如果同时对多个属性进行动画处理,或者如果您只想使用更方便的语法为特定属性设置动画,则ViewPropertyAnimator可能更适合该任务。

优点:可以为多个同时进行的动画提供更好的性能,因为它将优化 无效调用 以针对多个属性 仅发生一次,而不是每个动画属性独立地导致其自身无效。同样,其更易于使用,因为调用者只需告诉View对象要对其进行动画处理的属性以及要对其进行动画处理的值,并且该类将处理配置基础Animator类的详细信息,并且启动它。

cc:此类不是由调用方构造的,而是由将为其动画的View构造的。调用View.animate() 将返回对该视图相应的ViewPropertyAnimator对象的引用。

#####简单的说:前面有示例使用ObjectAnimator来实现的动画,ViewPropertyAnimator都可以实现。

 ObjectAnimator实现:

//之前的实现转动view 90°
val animator = ObjectAnimator.ofFloat(view,"rotation", 0F, 90F)
animator.setDuration(2000)//动画时长
animator.interpolator = BounceInterpolator()//添加回弹动画,你还可以添加其他的效果哦
animator.start()

 ViewPropertyAnimator实现:

//旋转
view.animate().rotation(90F).setDuration(2000).setInterpolator(BounceInterpolator()).start()

对比一下,简单明了,也就是ViewPropertyAnimator的优势,而且还可以同时对多个属性进行动画处理:

  1. 位移动画(translationX/translationY)

  2. 透明度动画(alpha)

  3. 旋转动画(rotation)

  4. 缩放动画(scale)

view.animate().translationX(-100F).translationY(100F)//平移
            .alpha(0.5F)//透明度
            .rotation(90F)//旋转
            .scaleX(2F).scaleY(2F)//缩放
            .setDuration(1000L)
            .setInterpolator(BounceInterpolator())
            .start()

运行效果:

Android 属性动画之自动优化的动画- ViewPropertyAnimator

 

###最后补充下属性设置:translationXBy()/translationYBy()/alphaBy()/rotationBy()/scaleXBy()/scaleYBy()
方法带By是变化多少,不带是变化至多少,这里应该很好理解。