动画的正确使用姿势
2017-06-13 17:08
453 查看
一、Android 的动画由alpha、scale、translate、rotate四种类型组成。它们在xml中的使用姿势是怎样的呢?
在xml中定义的动画存放于res/anim文件夹下,使用R.anim.xxx来引用alpha、scale、translate、rotate这四种动画都继承自Animation类,继承的属性如下:
android:duration="1500" //动画持续时间 android:fillAfter="true" //动画结束时是否保持结束时的状态 android:fillBefore="true" //动画结束时是否还原开始时的状态 android:repeatCount="11" //重复次数,repeatCount和repeatMode要一起使用才有效果 android:repeatMode="reverse" //设置回放的类型,取值:reverse(倒序回放)、restart(重新从头播放). android:interpolator="@android:anim/accelerate_interpolator"//插值器,指定动作的效果
1.scale缩放动画
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="0.0" //开始时x方向上相对于自身的缩放比例,浮点值,例如:1.0表示原始大小,0.5表示原来的一半 android:toXScale="2.0" //结束时x方向上相对于自身缩放比例 android:fromYScale="0.0" //开始时y方向上相对于自身的缩放比例 android:toYScale="2.0" //结束时y方向上相对于自身缩放比例 android:pivotX="50%" //下面详解 android:pivotY="50%" //下面详解 />
pivotX 和pivoY的取值有三种形式:数值,百分数,百分数p,都是以控件左上角为坐标原点来计算的,下面详细说明:
pivotX 和pivoY的取值都为0时,动画起始点就是坐标原点
(1) pivotX 和pivoY的取值都为数值: 50,表示在坐标原点的基础上在x轴和y轴上分别加50px,作为动画的起始点
(2)pivotX 和pivoY的取值都为百分数:50%,表示在坐标原点的基础上在x轴加上自身宽度的50%,在y轴加上自身高度的50%,作为动画的起始点
(3)pivotX 和pivoY的取值都为百分数p:50%p,此时取值的基数是父控件,也就是在坐标原点的基础上在x轴加上父控件宽度的50%,在y轴上加上父控件高度的50%,作为动画的起始点
2.alpha调节透明度
<?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0.0" //动画开始时的透明度,0.0表示全透明,1.0表示完全不透明,取值范围:0.0~1.0 android:toAlpha="1.0" //动画结束时的透明度, />
3.rotate旋转动画
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" //开始旋转时的角度位置,正值表示顺时针方向度数,负值表示逆时针度数 android:toDegrees="360" //结束旋转时要转到的角度位置, android:pivotX="50" //取值类型:数值、百分数、百分数p,具体含义与scale中相同 android:pivotY="50" />
4.translate平移动画
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" //起始点x坐标,取值类型:数值、百分数、百分数p,使用方式同scale中一样,下面的属性也相同 android:toXDelta="100" //结束点的x坐标 android:fromYDelta="0" //起始点的y坐标 android:toYDelta="100" //结束点的y坐标 />
5.set组合动画
set标签没有自己的属性,它的属性都是从Animation中继承来的,会对set标签下的所有子控件起作用android:duration="1500" //动画持续时间 android:fillAfter="true" //动画结束时是否保持结束时的状态 android:fillBefore="true" //动画结束时是否还原开始时的状态 android:repeatCount="11" //重复次数,repeatCount和repeatMode要一起使用才有效果 android:repeatMode="reverse" //设置回放的类型,取值:reverse(倒序回放)、restart(重新从头播放). android:interpolator="@android:anim/accelerate_interpolator"//插值器,指定动作的效果
例子:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fillAfter="true" > <alpha android:fromAlpha="0.0" android:toAlpha="1.0" /> <rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50" android:pivotY="50" /> <scale android:fromXScale="0.5" android:toXScale="1.0" android:fromYScale="0.5" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" /> <translate android:fromXDelta="0" android:toXDelta="100" android:fromYDelta="0" android:toYDelta="100" /> </set>
6.执行动画
调用下面的方法就可以获取到在res/anim中定义的动画文件了Animation animation = AnimationUtils.loadAnimation(this,R.anim.set_anim); view.startAnimation(animation);
二、Android 的动画在代码中的使用姿势
ScaleAnimation TranslateAnimation RotateAnimation AlphaAnimation继承自Animation,继承的方法与xml中对应:setDuration(long ) 动画持续时间,单位:毫秒 setFillAfter(boolean) 动画结束时是否保持结束时的状态 setFillBefore(boolean) 动画结束时是否保持开始时的状态 setRepeatCount(int) 设置重复次数 setRepeatMode(int) 设置重复类型,取值RESTART或REVERSE,必须和setRepeatCount()一起使用才有效果 setInterpolator(Interpolator)设置插值器
1.ScaleAnimation
pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENTpublic ScaleAnimation(float fromX, float toX, float fromY, float toY) public ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY) public ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f,2.0f,1.0f,2.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
2.AlphaAnimation
AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f,1.0f);
3.RotateAnimation
pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENTpublic RotateAnimation(float fromDegrees, float toDegrees) public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY) public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) RotateAnimation rotateAnimation = new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
4.TranslateAnimation
pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENTpublic TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue) TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE,100,Animation.ABSOLUTE,0,Animation.ABSOLUTE,100);
5.AnimationSet
public AnimationSet(boolean shareInterpolator) 是否共用一个插值器 public void addAnimation(Animation a) 将Animation添加到AnimationSet中,同时执行动画
相关文章推荐
- 如何正确使用平移动画
- 使用Flume Log4j Appender正确的姿势
- Android开发必知--使用View.setId的正确姿势
- OSChina 周四乱弹 ——开源马克杯的正确使用姿势
- 【Python环境】如何使用正确的姿势进行高效Python函数式编程?
- 如何正确使用平移动画(关于fillBefore和fillAfter的一点说明)
- 使用开源项目的正确姿势,都是血和泪的总结!
- FlowDroid在Ubuntu上正确使用姿势
- TCP三次握手的正确使用姿势
- NSnotificationCenter 正确使用姿势, removeObject 探索
- OpenEIM 使用云计算的正确姿势是什么?
- 安卓推送技术手册——使用透传消息的正确姿势
- Fragment使用的正确姿势
- TCP三次握手的正确使用姿势
- 玩转渗透神器Kali:Kali Linux作为主系统使用的正确姿势TIPS
- [转载+实践理解]Android动画---如何正确使用平移动画(关于fillBefore和fillAfter的一点说明)(转载)
- 新手与大神就在一念之间,论HTML5的正确使用姿势。创优翼教育
- 使用libcurl的正确姿势
- 如何使用Elastic Search正确的姿势进行搜索
- 使用开源项目的正确姿势,都是血和泪的总结!