Animation从总体来说可以分为两类:

1.Tweened Animations:该类提供了旋转,移动,伸展,淡入淡出等效果

Tweened Animations也有四种类型:

1.     Alpha:淡入淡出效果

2.     Scale:缩放效果

3.     Rotate:旋转效果

4.     Translate:移动效果

设置动画有两种方式:在xml文件中或者在java代码中

在XML中设置动画效果步骤:

1.     在res文件夹下新建一个名为anim的文件夹

2.     创建xml文件,并首先加入set标签(set标签就相当于Java代码中的AnimationSet)

3.     在Set标签中加入alpha,scale,rotate,translate标签(相当于Java代码中的AlphaAnimation,ScaleAnimation,RotateAnimation,TranslateAnimation)

4.     在Java代码中使用AnimationUtils的loadAnimation方法来加载XML文件,并得到一个Animation对象

5.     使用控件的startAnimation()方法执行这个Animation对象

那么通用的属性:

  • android:duration:设置动画持续时间
  • android:fillAfter:如果fillAfter设为true,则动画执行后,控件将停留在动画结束的状态
  • android:fillBefore:如果fillBefore设为true,则动画执行后,控件将回到动画开始的状态
  • android:startOffset(long startOffset):设置动画执行之前等待的时间(单位:毫秒)
  • android:repeatCount(int repeatCount):设置动画重复的次数
  • android:interpolator:设置动画的变化速度,其值:

android:interpolator="@android:anim/accelerate_decelerate_interpolator":先加速,后减速

android:interpolator="@android:anim/accelerate_interpolator":加速

android:interpolator="@android:anim/decelerate_interpolator":减速

android:interpolator="@android:anim/cycle_Interpolator":动画循环播放特定次数,速率改变沿着正弦曲线

android:interpolator="@android:anim/linear_Interpolator":匀速

示例:

  1. 1.  <?xml version="1.0" encoding="utf-8"?>
  2. 2.  <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3.      android:interpolator="@android:anim/accelerate_interpolator" >
  4. 4.
  5. 5.      <alpha
  6. 6.          android:duration="500"
  7. 7.          android:fromAlpha="1.0"
  8. 8.          android:startOffset="500"
  9. 9.          android:toAlpha="0.0" />
  10. 10.
  11. 11. </set>
1.	<?xml version="1.0" encoding="utf-8"?>
2. <set xmlns:android="http://schemas.android.com/apk/res/android"
3. android:interpolator="@android:anim/accelerate_interpolator" >
4.
5. <alpha
6. android:duration="500"
7. android:fromAlpha="1.0"
8. android:startOffset="500"
9. android:toAlpha="0.0" />
10.
11. </set>

rotate.xml

  1. 1.  <?xml version="1.0" encoding="utf-8"?>
  2. 2.  <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3.      android:interpolator="@android:anim/accelerate_interpolator" >
  4. 4.
  5. 5.      <rotate
  6. 6.          android:duration="5000"
  7. 7.          android:fromDegrees="0"
  8. 8.          android:pivotX="50%"
  9. 9.          android:pivotY="50%"
  10. 10.         android:toDegrees="360" />
  11. 11.
  12. 12. </set>
1.	<?xml version="1.0" encoding="utf-8"?>
2. <set xmlns:android="http://schemas.android.com/apk/res/android"
3. android:interpolator="@android:anim/accelerate_interpolator" >
4.
5. <rotate
6. android:duration="5000"
7. android:fromDegrees="0"
8. android:pivotX="50%"
9. android:pivotY="50%"
10. android:toDegrees="360" />
11.
12. </set>

scale.xml

  1. 1.  <?xml version="1.0" encoding="utf-8"?>
  2. 2.  <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3.      android:interpolator="@android:anim/accelerate_interpolator" >
  4. 4.
  5. 5.      <scale
  6. 6.          android:duration="2000"
  7. 7.          android:fromXScale="1.0"
  8. 8.          android:fromYScale="1.0"
  9. 9.          android:pivotX="50%"
  10. 10.         android:pivotY="50%"
  11. 11.         android:toXScale="0.0"
  12. 12.         android:toYScale="0.0" />
  13. 13.
  14. 14. </set>
1.	<?xml version="1.0" encoding="utf-8"?>
2. <set xmlns:android="http://schemas.android.com/apk/res/android"
3. android:interpolator="@android:anim/accelerate_interpolator" >
4.
5. <scale
6. android:duration="2000"
7. android:fromXScale="1.0"
8. android:fromYScale="1.0"
9. android:pivotX="50%"
10. android:pivotY="50%"
11. android:toXScale="0.0"
12. android:toYScale="0.0" />
13.
14. </set>

translate.xml

  1. 1.  <?xml version="1.0" encoding="utf-8"?>
  2. 2.  <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3.      android:interpolator="@android:anim/accelerate_interpolator" >
  4. 4.
  5. 5.      <translate
  6. 6.          android:duration="2000"
  7. 7.          android:fromXDelta="50%"
  8. 8.          android:fromYDelta="0%"
  9. 9.          android:toXDelta="100%"
  10. 10.         android:toYDelta="100%" />
  11. 11.
  12. 12. </set>
1.	<?xml version="1.0" encoding="utf-8"?>
2. <set xmlns:android="http://schemas.android.com/apk/res/android"
3. android:interpolator="@android:anim/accelerate_interpolator" >
4.
5. <translate
6. android:duration="2000"
7. android:fromXDelta="50%"
8. android:fromYDelta="0%"
9. android:toXDelta="100%"
10. android:toYDelta="100%" />
11.
12. </set>

使用:

  1. case R.id.alphaButton:
  2. Animation alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);
  3. mImageView.startAnimation(alphaAnimation);
  4. break;
  5. case R.id.scaleButton:
  6. Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);
  7. mImageView.startAnimation(scaleAnimation);
  8. break;
  9. case R.id.rotateButton:
  10. Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);
  11. mImageView.startAnimation(rotateAnimation);
  12. break;
  13. case R.id.translateButton:
  14. Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
  15. mImageView.startAnimation(translateAnimation);
  16. break;
case R.id.alphaButton:
Animation alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);
mImageView.startAnimation(alphaAnimation);
break; case R.id.scaleButton:
Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);
mImageView.startAnimation(scaleAnimation);
break; case R.id.rotateButton:
Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);
mImageView.startAnimation(rotateAnimation);
break; case R.id.translateButton:
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
mImageView.startAnimation(translateAnimation);
break;

java代码实现

Java代码中的通用属性:

  • setDuration(long durationMillis):设置动画持续事件(单位:毫秒)
  • setFillAfter(boolean fillAfter):如果fillAfter设为true,则动画执行后,控件将停留在动画结束的状态
  • setFillBefore(boolean fillBefore):如果fillBefore设为true,则动画执行后,控件将回到动画开始的状态
  • setStartOffset(long startOffset):设置动画执行之前等待的时间(单位:毫秒)
  • setRepeatCount(int repeatCount):设置动画重复的次数
  • setInterpolator(Interpolator i):设置动画的变化速度

setInterpolator(newAccelerateDecelerateInterpolator()):先加速,后减速

setInterpolator(newAccelerateInterpolator()):加速

setInterpolator(newDecelerateInterpolator()):减速

setInterpolator(new CycleInterpolator()):动画循环播放特定次数,速率改变沿着正弦曲线

setInterpolator(new LinearInterpolator()):匀速

以及其他一些特定的动画效果

java代码

  1. case R.id.alphaButton:
  2. // 创建一个AnimationSet对象(AnimationSet是存放多个Animations的集合)
  3. AnimationSet animationSet = new AnimationSet(true);
  4. // 创建一个AlphaAnimation对象(参数表示从完全不透明到完全透明)
  5. AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
  6. // 设置动画执行的时间(单位:毫秒)
  7. alphaAnimation.setDuration(1000);
  8. // 将AlphaAnimation对象添加到AnimationSet当中
  9. animationSet.addAnimation(alphaAnimation);
  10. // 使用ImageView的startAnimation方法开始执行动画
  11. mImageView.startAnimation(animationSet);
  12. break;
  13. case R.id.scaleButton:
  14. // 创建一个AnimationSet对象(AnimationSet是存放多个Animations的集合)
  15. animationSet = new AnimationSet(true);
  16. // 创建一个ScaleAnimation对象(以某个点为中心缩放)
  17. ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1, 0.1f,
  18. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
  19. // 设置动画执行之前等待的时间(单位:毫秒)
  20. scaleAnimation.setStartOffset(1000);
  21. // 设置动画执行的时间(单位:毫秒)
  22. scaleAnimation.setDuration(2000);
  23. // 如果fillAfter设为true,则动画执行后,控件将停留在动画结束的状态
  24. // 运行了一下发现以下奇怪的现象
  25. // scaleAnimation.setFillAfter(true);不会停留在动画结束的状态
  26. // animationSet.setFillAfter(true);则会停留在动画结束的状态
  27. animationSet.setFillAfter(true);
  28. // 将ScaleAnimation对象添加到AnimationSet当中
  29. animationSet.addAnimation(scaleAnimation);
  30. // 使用ImageView的startAnimation方法开始执行动画
  31. mImageView.startAnimation(animationSet);
  32. break;
  33. case R.id.rotateButton:
  34. // 创建一个AnimationSet对象(AnimationSet是存放多个Animations的集合)
  35. animationSet = new AnimationSet(true);
  36. // 创建一个RotateAnimation对象(以某个点为圆心旋转360度)
  37. RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
  38. Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.25f);
  39. // 设置动画执行的时间(单位:毫秒)
  40. rotateAnimation.setDuration(5000);
  41. // 将RotateAnimation对象添加到AnimationSet当中
  42. animationSet.addAnimation(rotateAnimation);
  43. // 使用ImageView的startAnimation方法开始执行动画
  44. mImageView.startAnimation(animationSet);
  45. break;
  46. case R.id.translateButton:
  47. // 创建一个AnimationSet对象(AnimationSet是存放多个Animations的集合)
  48. animationSet = new AnimationSet(true);
  49. // 创建一个RotateAnimation对象(从某个点移动到另一个点)
  50. TranslateAnimation translateAnimation = new TranslateAnimation(
  51. Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0.5f,
  52. Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 1.0f);
  53. // 设置动画执行的时间(单位:毫秒)
  54. translateAnimation.setDuration(1000);
  55. // 将TranslateAnimation对象添加到AnimationSet当中
  56. animationSet.addAnimation(translateAnimation);
  57. // 使用ImageView的startAnimation方法开始执行动画
  58. mImageView.startAnimation(animationSet);
  59. break;

Android中Animation 详细解读的更多相关文章

  1. Android BLE蓝牙详细解读

    代码地址如下:http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能家 ...

  2. wemall app商城源码Android中ViewHolder详细解释

    1.ViewHolder的解释: (1).只是一个静态类,不是Android的API方法. (2).它的作用就在于减少不必要的调用findViewById,然后把对底下的控件引用存在ViewHolde ...

  3. 关于Android中Animation的停止【转载】

    转载自:http://blog.csdn.net/easonx1990/article/details/8231520 最近遇到一个需求,通过在GridView上改变焦点,并且GridView上每个i ...

  4. android中Animation动画的连续播放与播放完毕后停留在最后的状态

    我们做安卓应用的苦逼程序员们常常会需要用到Animation也就是动画.比如做地图功能的时候.我们在手机旋转时需要根据手机重力感应来调整地图的角度,让它上面的“北”一直指向地球的北面...好多人做动画 ...

  5. PHP中foreach详细解读

    oreach 语法结构提供了遍历数组的简单方式.foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息.有两种语法: foreach (array_ ...

  6. Android中apk动态载入技术研究(2)android插件化及实现

    了解了android中类载入的前期知识点后,来看看android中DexClassLoader详细的实现     详细载入流程例如以下:     宿主程序会到文件系统比方SD卡中去载入APK[1],然 ...

  7. Android中的GraphicBuffer同步机制-Fence

    Fence是一种同步机制,在Android里主要用于图形系统中GraphicBuffer的同步.那它和已有同步机制相比有什么特点呢?它主要被用来处理跨硬件的情况.尤其是CPU.GPU和HWC之间的同步 ...

  8. 详细解读Android中的搜索框(二)—— Search Dialog

    Search Dialog是提供搜索的控件之一,还有一个是上次小例子给出的searchView,关于SearchView的东西后面会说到.本次先从Search Dialog说起,让大家慢慢理解andr ...

  9. 深入Animation,在SurfaceView中照样使用Android—Tween Animation!

    第一类:Frame By Frame 帧动画( 不推荐游戏开发中使用)             所谓帧动画,就是顺序播放事先做好的图像,类似于放电影:             分析: 此种方式类似我之 ...

随机推荐

  1. [转]expect的安装

    转自:http://blog.chinaunix.net/uid-20639775-id-2453085.html Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来 ...

  2. 20145308刘昊阳 《Java程序设计》第2周学习总结

    20145308刘昊阳 <Java程序设计>第2周学习总结 教材学习内容总结 第三章 基础语法 3.1 类型.变量与运算符 类型 基本类型 整数(short/int/long) short ...

  3. ACM 汉诺塔(三)

    汉诺塔(三) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度 ...

  4. 使用Canvas绘制图形的基本教程

    原文地址:http://www.cnblogs.com/picaso/archive/2012/11/26/2789077.html HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以 ...

  5. 在 Excel 工作簿中定义决策表(Oracle Policy Modeling-Define decision tables in Excel workbooks)

    要在 Excel 中编写规则,您只需在表中编写规则,并使用 Oracle Policy Modeling 样式标识单元格中的信息类型, 以便这些规则可以编译并在 Oracle Determinatio ...

  6. Oracle临时表GLOBAL TEMPORARY TABLE

    临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前 会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到.临时表不存 ...

  7. 使用command对象操作数据库

    1.Command对象查询数据库 protected void Button1_Click(object sender, EventArgs e) { //读取web.config节点配置 strin ...

  8. Windows Phone 8 MVVM

    Why? 1 reason MVVM works really well with XAML based applications is because of the powerful XAML bi ...

  9. iOS开发-定制多样式二维码

    iOS开发-定制多样式二维码   二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常 ...

  10. wampserver的php.ini文件

    在修改php.ini文件时,找到了php文件夹下的php.ini文件,但是重启所有服务后就是不起作用.查看前辈的博客后,明白了是在apache目录下的php.ini才是起作用的. .