在安卓中使用属性动画实现基本动画效果
Posted 女儿控伪全栈老徐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在安卓中使用属性动画实现基本动画效果相关的知识,希望对你有一定的参考价值。
一、属性动画与View动画
与属性动画相对的是View动画,关于View动画的简单介绍详见:
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();
以上是关于在安卓中使用属性动画实现基本动画效果的主要内容,如果未能解决你的问题,请参考以下文章