文档章节

Android中Animation 详细解读

欧吧在线
 欧吧在线
发布于 2015/06/16 15:45
字数 1351
阅读 12
收藏 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 动画 之 ObjectAnimator

android 3.0之后添加的一些动画 animator 中的 ObjectAnimator: 补间动画能实现的: 1.alpha 透明度 //第一个参数为 view对象,第二个参数为 动画改变的类型,第三,第四个参数依次是开始透明...

Freewheel
2015/08/16
0
0
实现Path2.0中绚丽的的旋转菜单

上图先: 那么下面开始吧~首先,将整个菜单动画分解开来。 一级菜单按钮的旋转动画2个,十字和叉叉状态的转换。 二级菜单按钮的平移动画2个,弹簧效果的in和out 二级菜单按钮的点击效果,放大...

小克898
2012/11/01
0
0
Android的Animation之LayoutAnimation使用方法

LayoutAnimationController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果,可以在XML文件中设置,亦可以在Java代码中设置。 一种直接在XML文件中设置 1. 在res/a...

宇宙执政
2013/08/30
0
0
Android动画:献上一份详细 & 全面的动画知识学习攻略

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

Carson_Ho
06/06
0
0
Android Animation学习笔记

关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画...

xiahuawuyu
2012/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《看图轻松理解数据结构与算法系列》导引贴

最近学习数据结构,遇到一个很喜欢的博主,他的文章图文并茂,理解起来很容易。特此开贴记录,方便反复阅读。 博主主页 https://juejin.im/user/57c3970f79bc440063e58518/posts?sort=popul...

科陆李明
37分钟前
1
0
20.27 分发系统介绍~ 20.30 expect脚本传递参数

分发系统介绍分发系统-expect讲解(也就是一个分发的脚本)场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因...

洗香香
51分钟前
2
0
设计一个百万级的消息推送系统

前言 首先迟到的祝大家中秋快乐。 最近一周多没有更新了。其实我一直想憋一个大招,分享一些大家感兴趣的干货。 鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两...

crossoverJie
57分钟前
2
0
软件架构:5种你应该知道的模式

Singleton(单例模式)、仓储模式(repository)、工厂模式(factory)、建造者模式(builder)、装饰模式(decorator)……大概每个上课听讲的程序员都不会陌生——软件的设计模式为我们提供...

好雨云帮
今天
3
0
OSChina 周二乱弹 —— 这只是一笔金钱交易

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《暮春秋色》- 窦唯 / 译乐队 《暮春秋色》- 窦唯 / 译乐队 手机党少年们想听歌,请使劲儿戳(这里) @我没有抓狂:跨服聊...

小小编辑
今天
1K
19

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部