文档章节

Android中Animation 详细解读

欧吧在线
 欧吧在线
发布于 2015/06/16 15:45
字数 1351
阅读 12
收藏 0
点赞 0
评论 0

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":匀速

示例:

[java] view plaincopy

  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>    


rotate.xml

[java] view plaincopy

  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>   

scale.xml

[java] view plaincopy

  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>   


translate.xml

[java] view plaincopy

  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>    


使用:

[java] view plaincopy

  1. case R.id.alphaButton:    

  2.             Animation alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);    

  3.             mImageView.startAnimation(alphaAnimation);    

  4.             break;    

  5.     

  6.         case R.id.scaleButton:    

  7.             Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);    

  8.             mImageView.startAnimation(scaleAnimation);    

  9.             break;    

  10.     

  11.         case R.id.rotateButton:    

  12.             Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);    

  13.             mImageView.startAnimation(rotateAnimation);    

  14.             break;    

  15.     

  16.         case R.id.translateButton:    

  17.             Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);    

  18.             mImageView.startAnimation(translateAnimation);    

  19.             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代码

[java] view plaincopy

  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.    

  14.        case R.id.scaleButton:    

  15.            // 创建一个AnimationSet对象(AnimationSet是存放多个Animations的集合)    

  16.            animationSet = new AnimationSet(true);    

  17.            // 创建一个ScaleAnimation对象(以某个点为中心缩放)    

  18.            ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1, 0.1f,    

  19.                    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);    

  20.            // 设置动画执行之前等待的时间(单位:毫秒)    

  21.            scaleAnimation.setStartOffset(1000);    

  22.            // 设置动画执行的时间(单位:毫秒)    

  23.            scaleAnimation.setDuration(2000);    

  24.            // 如果fillAfter设为true,则动画执行后,控件将停留在动画结束的状态    

  25.            // 运行了一下发现以下奇怪的现象    

  26.            // scaleAnimation.setFillAfter(true);不会停留在动画结束的状态    

  27.            // animationSet.setFillAfter(true);则会停留在动画结束的状态    

  28.            animationSet.setFillAfter(true);    

  29.                        // 将ScaleAnimation对象添加到AnimationSet当中    

  30.                        animationSet.addAnimation(scaleAnimation);    

  31.                        // 使用ImageView的startAnimation方法开始执行动画    

  32.                        mImageView.startAnimation(animationSet);    

  33.            break;    

  34.    

  35.        case R.id.rotateButton:    

  36.            // 创建一个AnimationSet对象(AnimationSet是存放多个Animations的集合)    

  37.            animationSet = new AnimationSet(true);    

  38.            // 创建一个RotateAnimation对象(以某个点为圆心旋转360度)    

  39.            RotateAnimation rotateAnimation = new RotateAnimation(0, 360,    

  40.                    Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.25f);    

  41.            // 设置动画执行的时间(单位:毫秒)    

  42.            rotateAnimation.setDuration(5000);    

  43.            // 将RotateAnimation对象添加到AnimationSet当中    

  44.            animationSet.addAnimation(rotateAnimation);    

  45.            // 使用ImageView的startAnimation方法开始执行动画    

  46.            mImageView.startAnimation(animationSet);    

  47.            break;    

  48.    

  49.        case R.id.translateButton:    

  50.            // 创建一个AnimationSet对象(AnimationSet是存放多个Animations的集合)    

  51.            animationSet = new AnimationSet(true);    

  52.            // 创建一个RotateAnimation对象(从某个点移动到另一个点)    

  53.            TranslateAnimation translateAnimation = new TranslateAnimation(    

  54.                    Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0.5f,    

  55.                    Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 1.0f);    

  56.            // 设置动画执行的时间(单位:毫秒)    

  57.            translateAnimation.setDuration(1000);    

  58.            // 将TranslateAnimation对象添加到AnimationSet当中    

  59.            animationSet.addAnimation(translateAnimation);    

  60.            // 使用ImageView的startAnimation方法开始执行动画    

  61.            mImageView.startAnimation(animationSet);    

  62.            break;    





2.Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多





© 著作权归作者所有

共有 人打赏支持
欧吧在线
粉丝 0
博文 32
码字总数 4007
作品 0
沈阳
Android动画:献上一份详细 & 全面的动画知识学习攻略

前言 动画的使用 是 开发中常用的知识 可是动画的种类繁多、使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策 本文将献上一份动画的全面介绍攻略,包括动...

Carson_Ho ⋅ 06/06 ⋅ 0

Android 动画:这是一份详细 & 清晰的 动画学习指南

前言 动画的使用 是 开发中常用的知识 可是动画的种类繁多、使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策 本文将献上一份动画的全面介绍攻略,包括动...

Carson_Ho ⋅ 05/03 ⋅ 0

Android动画绘制原理(源码解析)

个人博客地址 http://dandanlove.com/ 前言 Android 平台提供了三类动画,一类是 Tween 动画-Animation,即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果;第二类是 ...

静默加载 ⋅ 04/30 ⋅ 0

使用Python制作微信跳一跳半自动外挂+详细注释

思路 1.截取安卓手机当前屏幕图片并复制到Mac。 知识点:ADB工具--截屏命令 2.测量截图中两方块之间的距离。知识点:Matplotlib制图工具 3.根据距离判断手机所需按下的时间。 4.通过鼠标控制...

earth9 ⋅ 04/16 ⋅ 0

【Animations】自动动画布局更新(9)

原文 Android提供了预加载的动画,系统每次更改布局时都会运行该动画。您只需在布局中设置一个属性,以通知Android系统为这些布局更改设置动画效果,并为您执行系统默认动画。 提示:如果您想...

lichong951 ⋅ 05/28 ⋅ 0

Android Transition Animation 过渡动画解析

本文主要译自 lgvalle 的 Material-Animations 的 README.MD,文中的源码见 Material-Animations。 Android 4.4.2 中引入了 Transition 过渡动画,不过那时的 API 的功能比较简单,只能对整个...

JohnnyShieh ⋅ 04/09 ⋅ 0

android悬浮窗、收款二维码、相机处理、事件通知库、NFC读取等源码

Android精选源码 一个漂亮而强大的自定义view SeekBar(http://www.apkbus.com/thread-598080-1-1.html) 适用于Android的简单NFC读取源码(http://www.apkbus.com/thread-598082-1-1.html) 安卓......

逆鳞龙 ⋅ 04/24 ⋅ 0

环形动画加载视图AnimatedCircleLoadingView​​​​​​​

环形动画加载视图AnimatedCircleLoadingView AnimatedCircleLoadingView是基于Android手表动画android-watch-loading-animation衍生出来的动画加载视图。该视图采用循环的环形动画显示加载进...

大学霸 ⋅ 06/01 ⋅ 0

Android Jetpack 助推应用开发 | 中文字幕视频介绍

Android Jetpack 能帮助您加快应用开发速度,处理类似后台任务、UI 导航以及生命周期管理之类的活动,免去开发者编写样板代码的麻烦,专注提升应用体验。这次发布的 Android Jetpack 组件覆盖...

Android_开发者 ⋅ 05/14 ⋅ 0

Android RxJava: 这是一份全面的 操作符 使用汇总 (含详细实例讲解)

前言 ,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 开发者的欢迎。 如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 如此受欢迎的原...

Carson_Ho ⋅ 05/31 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 36分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 51分钟前 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 53分钟前 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 59分钟前 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

前端基础(三):函数

字数:1685 阅读时间:5分钟 函数定义 在最新的ES规范中,声明函数有4中方法: -函数声明 -函数表达式 -构造函数Function -生成器函数 1.函数声明 语法: function name([param[, param2 [....

老司机带你撸代码 ⋅ 今天 ⋅ 0

Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。 中国人把Stack翻译成“栈”,把Hea...

java高级架构牛人 ⋅ 今天 ⋅ 0

Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 今天 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 今天 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部