在安卓中使用属性动画实现基本动画效果

Posted 女儿控伪全栈老徐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在安卓中使用属性动画实现基本动画效果相关的知识,希望对你有一定的参考价值。

一、属性动画与View动画

与属性动画相对的是View动画,关于View动画的简单介绍详见:

在安卓中使用Animation类实现基础动画效果

在安卓中使用AnimationSet类同时执行多种动画效果

View动画虽然能够满足基本的动画效果,但是有一个比较致命的缺点:

UI界面上的元素看起来似乎是移动了,但那只是你眼睛所看到的“假象”,如果使用View.getX()或View.getY()来查看元素的位置,会发现它一直都没有变化。

也就是说,你的眼睛看到它移动了,实际上它真正的位置根本没有变化。

这样一来会产生什么结果呢?

比如你有一个按钮,它一开始的时候藏在版边,位于屏幕之外。你希望实现一个很酷炫的效果,通过滑动屏幕,将这个按钮从版边侧滑出来,这样用户就能够点击它。

你使用View动画来实现这个效果,它确实“满足”了你的要求,你的按钮从版边滑出来了。可坑爹的是,这个按钮的实际位置仍然在屏幕之外,所以它的可点击位置也仍然在屏幕之外。你根本就点不到它!

你使劲点击那个看上去已经从版边滑出来的按钮,却发现什么都没发生。哪怕把屏幕戳烂都没用。

这时候,就不能再使用View动画了,相同的效果我们需要使用属性动画来完成。

二、基本用法 

直接看代码段:

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"translationX",toX);
transAnim.setDuration(durationMillis);
transAnim.start();

是不是特别简单,唯一需要注意的是,ofFloat()方法中的第二个参数“translationX”,它代表动画的效果,常用的有以下这些:

2.1、X轴平移

关键字:translationX

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"translationX",toX);

参数解释:

view:要移动的View组件

translationX:X轴平移的动画效果

toX:要移动到的位置

2.2、Y轴平移

关键字:translationY

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"translationY",toY);

参数解释:

view:要移动的View组件

translationY:Y轴平移的动画效果

toY:要移动到的位置

2.3、旋转

关键字:rotation

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"rotation",from, to);

参数解释:

view:要旋转的View组件

rotation:旋转的动画效果

from:起始角度

to:结束角度,角度最大值为360

2.4、X轴旋转

关键字:rotationX

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"rotationX",from, to);

参数解释:

view:要旋转的View组件

rotationX:X轴旋转的动画效果

from:起始角度

to:结束角度,角度最大值为360

2.5、Y轴旋转

关键字:rotationY

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"rotationY",from, to);

参数解释:

view:要旋转的View组件

rotationY:Y轴旋转的动画效果

from:起始角度

to:结束角度,角度最大值为360

2.6、X轴缩放

关键字:scaleX

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"scaleX",from, to);

参数解释:

view:要缩放的View组件

scaleX:X轴缩放的动画效果

from:起始大小

to:结束大小

2.7、Y轴缩放

关键字:scaleY

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"scaleY",from, to);

参数解释:

view:要缩放的View组件

scaleY:Y轴缩放的动画效果

from:起始大小

to:结束大小

2.8、透明度变化

关键字:alpha

ObjectAnimator transAnim = ObjectAnimator.ofFloat(view,"alpha",from, to);

参数解释:

view:要变化的View组件

alpha:透明度变化的动画效果

from:起始透明度

to:结束透明度

三、组合动画

组合动画非常容易实现,根据自己的实际需要,先使用PropertyValuesHolder定义多个不同的动画效果:

PropertyValuesHolder ValuesHolder1 = PropertyValuesHolder.ofFloat("scaleX",0,1);
PropertyValuesHolder ValuesHolder2 = PropertyValuesHolder.ofFloat("scaleY",0,1);
PropertyValuesHolder ValuesHolder3 = PropertyValuesHolder.ofFloat("alpha",0,1);

然后使用ofPropertyValuesHolder()方法: 

ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(view, ValuesHolder1,ValuesHolder2, ValuesHolder3);

最后设置动画时长,并开始动画即可:

objectAnimator.setDuration(durationMillis);
objectAnimator.start();

以上是关于在安卓中使用属性动画实现基本动画效果的主要内容,如果未能解决你的问题,请参考以下文章

ios和安卓的动画原理是啥

动画效果-渐变动画

使用强大的 CSS 滤镜实现安卓充电动画效果

Android属性动画完全解析(上),初识属性动画的基本用法

CSS动画

安卓动画两种基本实现方式