android动画

来源:互联网 发布:java enum int 编辑:程序博客网 时间:2024/05/18 05:03

基础内容

android提供了4种基本的动画,移位-translate ,渐变-alpha,缩放-scale ,旋转-rotate。

在xml资源下res/anim目录下新建动画文件xml,类型是set。

有如下动画插入效果:

AccelerateDecelerateInterpolator   先加速再减速 AccelerateInterpolator  加速 AnticipateInterpolator  先回退一小步,然后再迅速前进 AnticipateOvershootInterpolator  先回退一小步,然后再迅速前进,在超过右边界一小步 BounceInterpolator  实现弹球效果 CycleInterpolator   周期运动 DecelerateInterpolator 减速 LinearInterpolator 匀速 OvershootInterpolator  快速前进到右边界上,再往外突出一小步 

如何使用XML中的动画效果:Animation myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);

如何在Java代码中定义动画:

//在代码中定义 动画实例对象private Animation myAnimation_Alpha;private Animation myAnimation_Scale;private Animation myAnimation_Translate;private Animation myAnimation_Rotate;    //根据各自的构造方法来初始化一个实例对象myAnimation_Alpha = new AlphaAnimation(0.1f, 1.0f);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_Translate = new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);myAnimation_Rotate = new RotateAnimation(0.0f, +350.0f,               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);//RotateAnimation:RotateAnimation(float fromDegrees, float toDegrees,             int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)//第一个参数fromDegrees为动画起始时的旋转角度    //第二个参数toDegrees为动画旋转到的角度   //第三个参数pivotXType为动画在X轴相对于物件位置类型  //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置//第五个参数pivotXType为动部分api:   //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
如何使用Java代码中的动画效果
部分api:
startAnimation (Animation animation)animation.isRunning()animation.stop()animation.start() 

逐帧动画

逐帧动画由一串连续的图片组成,通过xml来定义。
<animation-list        xmlns:android="http://schemas.android.com/apk/res/android"       android:oneshot="false">    <item android:drawable="@drawable/qq001" android:duration="80"/>    <item android:drawable="@drawable/qq002" android:duration="80"/>    <item android:drawable="@drawable/qq003" android:duration="80"/>    <item android:drawable="@drawable/qq004" android:duration="80"/>    <item android:drawable="@drawable/qq005" android:duration="80"/>    <item android:drawable="@drawable/qq006" android:duration="80"/>    <item android:drawable="@drawable/qq007" android:duration="80"/>    <item android:drawable="@drawable/qq008" android:duration="80"/>    </animation-list>  
可以将drawable以background或者src来使用,在代码里通过如下方式来获取引用并操作。
animationIV = (ImageView) findViewById(R.id.animationIV);   animationIV.setImageResource(R.drawable.animation1);    animationDrawable = (AnimationDrawable) animationIV.getDrawable();    animationDrawable.start(); 
或者是animationDrawable = (AnimationDrawable) animationIV.getBackground();

多个动画的衔接

<translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"          android:fromXDelta="0" android:toXDelta="200"           android:fillAfter="true"          android:duration="@android:integer/config_longAnimTime" />                    <translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"          android:fromYDelta="0" android:toYDelta="300"           <span style="color: #ff0000;"> android:startOffset="@android:integer/config_longAnimTime" </span>                    android:duration="@android:integer/config_longAnimTime" />  
有两段动画,第一个是从左向右平移,第二个是从上往下平移。或者是以下这种比较复杂的效果
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false">      <scale           android:interpolator="@android:anim/accelerate_decelerate_interpolator"          android:fromXScale="1.0"           android:toXScale="1.4"           android:fromYScale="1.0"           android:toYScale="0.6"           android:pivotX="50%"          android:pivotY="50%"          android:fillAfter="false"          android:duration="700" />      <set           android:interpolator="@android:anim/accelerate_interpolator"                  android:startOffset="700">                    <scale              android:fromXScale="1.4"               android:toXScale="0.0"                  android:fromYScale="0.6"              android:toYScale="0.0"               android:pivotX="50%"               android:pivotY="50%"               android:duration="400" />                    <rotate               android:fromDegrees="0"               android:toDegrees="-45"              android:toYScale="0.0"               android:pivotX="50%"               android:pivotY="50%"              android:duration="400" />      </set>  </set>
类似这种嵌套能实现动画的连续,或者在代码里监听前一个动画的结束,然后播放下一个动画。

使用style来定义动画

<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之间的切换动画都可以进行自定义了
注意,这个style资源文件如果放在application的manifest里编译,那么这个style适用于这个应用,对其他没影响。如果想作用于全局,可以修改frameworks/base/core/res/res/values/styles文件实现需要的效果。
例子,修改dialog的弹出方式为从下向上弹出。
先在styles.xml里添加咱们的style项:
<style name="mystyle" parent="android:Animation">        <item name="@android:windowEnterAnimation">@anim/dialog_animation</item>  //进入时的动画        <item name="@android:windowExitAnimation">@anim/dialog_animation_exit</item>    //退出时的动画    </style>
然后在代码里使用style样式:
Window window = mDialog.getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);window.setWindowAnimations(R.style.mystyle);
至于动画就看你发挥了,随意尝试:
<?xml version="1.0" encoding="utf-8"?>  <set xmlns:android="http://schemas.android.com/apk/res/android">      <alpha      android:fromAlpha="0.0"       android:toAlpha="1.0"      android:duration="500" />      <translate        android:toYDelta="100%p"        android:duration="500"        /></set>
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 眼睛红痒鼻子流鼻涕怎么办 19个月宝宝流鼻血怎么办 9个月宝宝流鼻血怎么办 8个月宝宝流鼻血怎么办 4个月宝宝流鼻血怎么办 20个月宝宝发烧流鼻血怎么办 60天宝宝老鼻塞怎么办 10个月宝宝头被撞到流鼻血怎么办 狗狗受凉吐了怎么办 狗狗咳嗽流鼻涕一直不好怎么办 宝宝感冒咳嗽流鼻涕发烧怎么办 狗狗感冒咳嗽流鼻涕怎么办 9岁儿童咳嗽鼻塞怎么办 三个月大的狗狗流鼻涕怎么办 3个月小狗干呕流鼻涕怎么办 狗狗流鼻涕怎么办有浓 小狗狗感冒了怎么办呢 狗狗一直擤鼻涕怎么办 小狗感冒流黄鼻涕怎么办 六个月宝宝鼻塞流鼻涕怎么办 小狗吃太多吐了怎么办 狗狗晕车一直吐怎么办 狗狗已经晕车了怎么办 狗狗得犬瘟怎么办 泰迪坐车吐了怎么办 小孩感冒流鼻涕带血怎么办 孩子鼻子流鼻涕有血丝怎么办 鼻子过敏流鼻涕有血丝怎么办 孕妇感冒头痛鼻涕带血怎么办 孕妇感冒鼻塞鼻涕带血怎么办 孕晚期感冒流鼻涕打喷嚏怎么办 孕晚期感冒鼻塞流鼻涕怎么办 怀孕初期鼻涕一直流怎么办 孩子一直流鼻水怎么办 9个月宝宝流鼻涕怎么办 8个月婴儿流鼻涕怎么办 3岁宝宝鼻塞咳嗽怎么办 又感冒又咳嗽了怎么办 鼻塞有一个月了怎么办 感冒一直流清水鼻涕怎么办 孩子受凉流清水鼻涕怎么办