Android 简单的动画效果有Animtion 类提供 1.在XML中实现动画效果;2.在java代码中实现动画效果。

动画相关的属性

表一:SET属性
名称 属性 备注
android:shareInterpolator 是否共享插入器 共享时,四个子节点都用一个插入器
android:interpolator 指定一个动画的插入器 使用系统资源
android:fillEnabled
当设置为true时,fillAfter和fillBefroe将会都为true,此时会忽略fillBefore 和fillAfter两种属性
android:fillAfter 该动画转化是否在动画结束后被应用 boolean
android:fillBefore 该动画转化是否在动画开始前被应用 boolean
android:repeatMode 重复模式 "restart" =从头开始 或者 "reverse"=从末尾开始
android:repeatCount 重复次数 integer -1为无限循环
android:duration 动画持续时间 integer
android:startOffset 动画时间间隔(动画执行前停留时间) long
android:zAdjustment 定义动画z order的变换 [normal] or [top] or [bottom]
android:detachWallpaper 未知 boolean


这里详细解释下android:interpolator 动画插入器属性(动画速度效果的体现)。

1.@android:anim/accelerate_decelerate_interpolator:先加速后减速

2.@android:anim/accelerate_interpolator :加速

3.@android:anim/decelerate_interpolator:减速

4.@android:anim/anticipate_interpolator:先往动画移动的反方向移动一点然后在沿着设定的动画移动 移动轨迹如下图。


5.anticipate_overshoot_interpolator:先往动画的反方向移动一点,然后沿着设定的方向移动到终点之后继续移动一点然后在回弹到最终设定的位置。如下图:


6.@android:anim/bounce_interpolator:动画移动到最后会有几次回弹的效果,最终停止在设定的位置。

7.@android:anim/cycle_interpolator:动画周期移动。

8.@android:anim/linear_interpolator:动画匀速移动。

9.@android:anim/overshoot_interpolator:动画到最后的位置会向反方向移动一点。



Interpolator对象 资源ID 功能作用
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 先加速再减速
AccelerateInterpolator @android:anim/accelerate_interpolator 加速
AnticipateInterpolator @android:anim/anticipate_interpolator 先回退一小步然后加速前进
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator 在上一个基础上超出终点一小步再回到终点
BounceInterpolator @android:anim/bounce_interpolator 最后阶段弹球效果
CycleInterpolator @android:anim/cycle_interpolator 周期运动
DecelerateInterpolator @android:anim/decelerate_interpolator 减速
LinearInterpolator @android:anim/linear_interpolator 匀速
OvershootInterpolator @android:anim/overshoot_interpolator 快速到达终点并超出一小步最后回到终点
关于修改动画插入器的属性 给个链接:点击打开链接


表二:alpha
名称 属性 备注
android:toAlpha 动画结束时的透明度 float [0,1] 0表示完全透明 1表示完全不透明
android:duration 动画持续时间 integer
android:fromAlpha 动画开始时的透明度 float [0,1] 0表示完全透明 1表示完全不透明



表三:SCALE
名称 属性 备注
android:fromXScale 动画开始时,X坐标上的伸缩尺寸 float,0.0表示收缩到没有、1.0表示正常无伸缩,小于1表示收缩,大于1表示放大
android:toXScale 动画结束时,X坐标上的伸缩尺寸 同上
android:fromYScale 动画开始时,Y坐标上的伸缩尺寸 同上
android:toYScale 动画结束时,Y坐标上的伸缩尺寸 同上
android:pivotX 动画相对于物件的X的开始位置 [0%,100%],50%表示中间
android:pivotY 动画相对于物件的Y的开始位置 0%,100%],50%表示中间
android:duration 同set 同set

表四:TRANSLATE
名称 属性 备注
android:fromXDelta 动画开始时,X坐标上的位置 integer 默认以自己为参照物
android:toXDelta 动画结束时,X坐标上的位置 integer 默认以自己为参照物
android:fromYDelta 动画开始时,Y坐标上的位置 integer 默认以自己为参照物
android:toYDelta 动画结束时,Y坐标上的位置 integer 默认以自己为参照物


表五:ROTATE
名称 属性 备注
android:fromDegrees 动画开始时,物件的角度 负数:逆时针旋转,正数:顺时针旋转
android:toDegrees 动画结束时,物件的角度(可大于360度) 同上
android:pivotX 动画相对于物件的X的开始位置 [0%,100%],50%表示中间
android:pivotY 动画相对于物件的Y的开始位置 [0%,100%],50%表示中间


一..XML 实现 alpha :

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    >    <alpha        android:duration="2000"        android:fromAlpha="0"        android:repeatCount="3"//动画重复的次数        android:repeatMode="reverse"//动画重复的模式  reverse:倒序,即从最后一帧播放动画;  restart:顺序,即从头开始播放动画        android:toAlpha="1.0" /></set>

几个值得注意的地方:如果你需要让动画设置android:fillAfter="true"
android:fillBefore="false" 的相关属性的时候 必须将属性这是在<set>下面才有效。比如有效的 设置是这样的
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:fillAfter="true"   >    <alpha        android:duration="2000"        android:fromAlpha="0"                android:repeatCount="3"        android:repeatMode="reverse"        android:toAlpha="1.0" /></set>
那么上面的动画就停留在最后一帧画面上。


二.代码实现alpha

Animation anim = new AlphaAnimation(0f, 1.0f);anim.setDuration(2000);anim.setRepeatCount(Animation.INFINITE);anim.setRepeatMode(Animation.RESTART);


三.XML实现scale

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:fillAfter="true"    android:interpolator="@android:anim/decelerate_interpolator" > <!-- 画面停留在最后一帧 -->    >    <scale        android:duration="2000"        android:fromXScale="0.5"        android:fromYScale="0.5"        android:pivotX="50.0%" > <!-- 动画相对于空间X坐标开始的位置50。0%表示从空间的正中央开始缩放动画 -->        android:pivotY="50.0%"        android:repeatCount="3"        android:repeatMode="reverse"        android:toXScale="1.0"        android:toYScale="1.0"         />    </scale></set>

四.代码实现scale
Animation anim1 = new ScaleAnimation(0.5f, 1.0f, 0.5f, 1.0f, 0.5f, 0.5f);anim1.setDuration(2000);anim1.setRepeatCount(3);anim1.setRepeatMode(Animation.REVERSE);anim1.setInterpolator(this, interpolator.accelerate_decelerate);anim1.setFillAfter(true);

五.XML实现stranslate

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/decelerate_interpolator"    android:fillAfter="true" >    <translate        android:duration="2000"        android:fromXDelta="0"        android:fromYDelta="0"        android:toXDelta="0"        android:toYDelta="1080" /></set>


六代码实现Stranslate

Animation animTranlate = new TranslateAnimation(0, 0, 0, 400);animTranlate.setDuration(2000);animTranlate.setFillAfter(true);animTranlate.setInterpolator(this, interpolator.bounce);text.startAnimation(animTranlate);


七.XML实现rotate

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:fillAfter="true"    android:interpolator="@android:anim/accelerate_decelerate_interpolator" >    <rotate        android:duration="2000"        android:fromDegrees="0"        android:pivotX="50%"        android:pivotY="50%"        android:toDegrees="180"//负数就是逆时针,正数顺时针。
/></set>
八.代码实现rotate

Animation animRotate = new RotateAnimation(0f, 360f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);animRotate.setDuration(2000);animRotate.setInterpolator(this, interpolator.bounce);animRotate.setFillAfter(true);<span style="white-space:pre">animRotate.setStartOffset(2000);</span>//动画执行前停留时间text.startAnimation(animRotate);

九.组合动画的实现

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="2000"    android:fillAfter="true"    android:interpolator="@android:anim/accelerate_decelerate_interpolator" >    <alpha        android:fromAlpha="0"        android:toAlpha="1.0" />    <scale        android:fromXScale="0"        android:fromYScale="0"        android:pivotX="50%"        android:pivotY="50%"        android:toXScale="1.0"        android:toYScale="1.0" /></set>


十.代码实现组合动画

Animation anim1 = new ScaleAnimation(0.5f, 1.0f, 0.5f, 1.0f, 0.5f, 0.5f);anim1.setDuration(2000);anim1.setRepeatCount(3);anim1.setRepeatMode(Animation.REVERSE);anim1.setInterpolator(this, interpolator.accelerate_decelerate);anim1.setFillAfter(true);// text.setAnimation(anim1);Animation animTranlate = new TranslateAnimation(0, 0, 0, 400);animTranlate.setDuration(2000);animTranlate.setFillAfter(true);animTranlate.setInterpolator(this, interpolator.bounce);// text.startAnimation(animTranlate);Animation animRotate = new RotateAnimation(0f, 360f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);animRotate.setDuration(2000);animRotate.setInterpolator(this, interpolator.bounce);animRotate.setFillAfter(true);// text.startAnimation(animRotate);AnimationSet animationSet = new AnimationSet(true);animationSet.addAnimation(animRotate);animationSet.addAnimation(animTranlate);animationSet.addAnimation(anim1);text.startAnimation(animationSet);


来一个示例:设置当前页的一个动画效果。

代码中这么写:

public void setCurPage(final int page) {Animation a = AnimationUtils.loadAnimation(MiLaucherMainActivity.this,R.anim.mi_laucher_scale_in);a.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stubtv_page.setText((page + 1) + "");tv_page.startAnimation(AnimationUtils.loadAnimation(MiLaucherMainActivity.this,R.anim.mi_laucher_scale_out));}});tv_page.startAnimation(a);}

mi_laucher_scale_in.xml 文件:<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <scale android:duration="300" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="0.0" android:toYScale="1.0" /></set>
mi_laucher_scale_out.xml 文件:<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <scale android:duration="300" android:fromXScale="0.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" /></set>


完结!

更多相关文章

  1. Android图文详解属性动画
  2. android 过渡动画研究
  3. Android(安卓)Xml文件生成,Xml数据格式写入
  4. Android开机LOGO
  5. Android开机LOG
  6. android gif动画
  7. 开机动画(闪动的ANDROID字样的动画图片)
  8. Android图文详解属性动画
  9. android之AnimationDrawable

随机推荐

  1. android 开源项目(城市定位)
  2. Android中下载文件的使用
  3. Android(安卓)学习之- 单选按钮、复选框
  4. Android(安卓)Applications Tutorial 22.
  5. android security and policy
  6. android canvas 画闹钟 圆弧
  7. 5 Android(安卓)Websites You Should Che
  8. Appcelerator Cloud Push Notification i
  9. as真机安装apk遇到的一个坑 INSTALL_FAIL
  10. 10.Android(安卓)ImageView ScaleType属