android之animation解析一
来源:互联网 发布:minimax算法 编辑:程序博客网 时间:2024/05/06 10:46
我们开发一款app,为了用户体验效果更好,必然少不了动画的效果,动画之前我用flash做过一些简单的小demo,后来android开发中,我们可以不用flash也可以做出那样的效果,而且自己比较喜欢这些小动画的,就私下来自己研究了,来分享给大家。
Activity的切换动画
从安卓2.0开始在Activity增加了一个方法:
public void overridePendingTransition (int enterAnim, int exitAnim)
其中第一个参数为进入时的动画,第二参数为退出时的动画。
该方法需要在startActivity或者finish方法之后调用。
修改Activity的动画样式:
<style name="Theme.Test" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:windowAnimationStyle">@style/Animation.Activity.Test</item> </style> <style name="Animation.Activity.Test" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/activity_open_enter</item> <item name="android:activityOpenExitAnimation">@anim/activity_open_exit</item> <item name="android:activityCloseEnterAnimation">@anim/activity_close_enter</item> <item name="android:activityCloseExitAnimation">@anim/activity_close_exit</item> <item name="android:taskOpenEnterAnimation">@anim/activity_open_enter</item> <item name="android:taskOpenExitAnimation">@anim/activity_open_exit</item> <item name="android:taskCloseEnterAnimation">@anim/activity_close_enter</item> <item name="android:taskCloseExitAnimation">@anim/activity_close_exit</item> <item name="android:taskToFrontEnterAnimation">@anim/activity_open_enter</item> <item name="android:taskToFrontExitAnimation">@anim/activity_open_exit</item> <item name="android:taskToBackEnterAnimation">@anim/activity_close_enter</item> <item name="android:taskToBackExitAnimation">@anim/activity_close_exit</item></style>
在清单文件中给Activity设置该样式即可。
如果我们把以上的动画全定义成@null,那么Activity切换就不会出现动画了,连系统自带的动画也不会出现。
如果在Activity的样式文件中加入了下面的代码,则Activity就会出现Dailog的样式了:
true
补间动画
Android的animation由四种类型组成
详见文档 android-sdk-windows/docs/guide/topics/resources/animation-resource.html
Animation主要有两种动画模式:
一种是tweened animation(渐变动画)
alpha–>AlphaAnimation
scale–>ScaleAnimation
一种是frame by frame(画面转换动画)
translate–>TranslateAnimation
rotate–>RotateAnimation
在XML文件中定义动画
在res目录下建立anim文件夹,创建xml文件:
<?xml version="1.0" encoding="utf-8"?><alpha xmlns:android="http://schemas.android.com/apk/res/android" />
以上为创建一个透明度渐变的动画。
当有多个动画需要组合到一起时,使用set元素包裹:
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha/> <scale/> <translate/> <rotate/></set>
以上为创建一个组合动画。
Android动画解析–XML
1、透明渐变动画:
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="3000" /> </set>
fromAlpha 属性为动画起始时透明度
toAlpha 属性为动画结束时透明度,透明度取值为0.0-1.0之间的float型数字,0.0为全透明,1.0为完全不透明
duration 属性为动画持续时间,单位为毫秒
2、比例变化动画:
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="0.0" android:toXScale="1.4" android:fromYScale="0.0" android:toYScale="1.4" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /></set>
interpolator 指定一个动画的插入器
fromXScale 属性为动画起始时 X坐标上的伸缩尺寸
toXScale 属性为动画结束时 X坐标上的伸缩尺寸
fromYScale 属性为动画起始时Y坐标上的伸缩尺寸
toYScale 属性为动画结束时Y坐标上的伸缩尺寸
以上四种属性取值为float型数字,0.0表示收缩到没有,1.0表示正常无伸缩,值小于1.0表示收缩,值大于1.0表示放大
pivotX 属性为动画相对于物件的X坐标的开始位置
pivotY 属性为动画相对于物件的Y坐标的开始位置
以上两种属性从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置
duration 属性为动画持续时间,单位为毫秒
fillAfter 属性当设置为true,动画结束后保留结束时的状态,当设置为false,动画结束后回到动画最初时候的状态。
3、位移动画:
<translate><?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="30" android:toXDelta="-80" android:fromYDelta="30" android:toYDelta="300" android:duration="2000" /></set>
fromXDelta 属性为动画起始时 X坐标上的位置
toXDelta 属性为动画结束时 X坐标上的位置
fromYDelta 属性为动画起始时 Y坐标上的位置
toYDelta 属性为动画结束时 Y坐标上的位置
以上四种属性可以加%和p,例如:
android:toXDelta=”100%”,表示自身的100%,也就是从View自己的位置开始。
android:toXDelta=”80%p”,表示父层View的80%,是以它父层View为参照的。
duration 属性为动画持续时间,单位为毫秒
4、旋转动画:
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <rotate android:duration="3000" android:fromDegrees="0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toDegrees="+350" /></set>
interpolator 指定一个动画的插入器
fromDegrees 属性为动画起始时物件的角度
toDegrees 属性为动画结束时物件旋转的角度 可以大于360度
当角度为负数——表示逆时针旋转,当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)(负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转)
pivotX 属性为动画相对于物件的X坐标的开始位置
pivotY 属性为动画相对于物件的Y坐标的开始位置
以上两种属性从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置
duration 属性为动画持续时间,单位为毫秒
获取XML中的动画
public static Animation loadAnimation (Context context, int id)
//第一个参数Context为程序的上下文,第二个参数id为动画XML文件的引用
例子:myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);
在代码中定义动画
AlphaAnimation(float fromAlpha, float toAlpha)//第一个参数fromAlpha为 动画开始时候透明度//第二个参数toAlpha为 动画结束时候透明度Animation myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f); myAnimation_Alpha.setDuration(5000);//设置时间持续时间为 5000毫秒----------ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸 //第二个参数toX为动画结束时 X坐标上的伸缩尺寸 //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸 //第四个参数toY为动画结束时Y坐标上的伸缩尺寸 //第五个参数pivotXType为动画在X轴相对于物件位置类型 //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置//第七个参数pivotXType为动画在Y轴相对于物件位置类型 //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置Animation myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);myAnimation_Scale.setDuration(700);//设置时间持续时间为 700毫秒 ----------RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)//第一个参数fromDegrees为动画起始时的旋转角度 //第二个参数toDegrees为动画旋转到的角度 //第三个参数pivotXType为动画在X轴相对于物件位置类型 //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置//第五个参数pivotXType为动画在Y轴相对于物件位置类型 //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置Animation myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);myAnimation_Rotate.setDuration(3000);//设置时间持续时间为 3000毫秒----------RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) //第一个参数fromDegrees为动画起始时的旋转角度 //第二个参数toDegrees为动画旋转到的角度 //第三个参数pivotXType为动画在X轴相对于物件位置类型 //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置//第五个参数pivotXType为动画在Y轴相对于物件位置类型 //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);myAnimation_Rotate.setDuration(3000);//设置时间持续时间为 3000毫秒 ----------使用动画:View.startAnimation(animation); //View组件使用动画
- android之animation解析一
- Android开发之Animation(一)
- Android 动画学习(一)之View Animation
- android开发笔记之animation(一)
- Android动画之Property Animation(一)
- Android 动画学习(一)之View Animation
- Android学习之Animation(一)
- Android 动画学习(一)之View Animation
- Android 动画学习(一)之View Animation
- Android 动画详解(一)之Animation
- Android开发学习之Animation之Android帧动画解析
- Android 动画解析(一) 逐帧动画(Frame Animation)
- Android Animation 用法解析
- Android Animation 动画解析
- Android Animation 动画解析
- android animation解析
- Android-Preproty animation解析
- Android Animation之frame animation
- iOS开发 - KVO/KVC
- 258. Add Digits
- Using existing Bootstrap themes in Liferay (Part II).
- leetcode-3 Longest Substring Without Repeating Characters
- C++返回值为对象时复制构造函数不执行怎么破
- android之animation解析一
- 查同义词信息
- java微信客服消息接口
- 腾讯等面试题
- Cordova各个插件使用介绍系列(六)—$cordovaDevice获取设备的相关信息
- lua学习参考
- android JNI 开发配置
- android中衡量一个APK性能的方法(fps、cpu、内存、gpu、io参数)
- c++虚函数纯虚函数