Android中的动画--笔记

android中的动画分 View Animation和Property Animation两大类

View Animation包括Tween Animation(补间动画)和Frame Animation(逐帧动画);

Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;

Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。

Property Animation  包括ValueAnimator和ObjectAnimator

Property Animation:属性动画,通过动态地改变对象的属性从而达到动画效果,属性动画为API 11新特性。

属性动画是怎么实现的?

属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等

为什么要有属性动画?

Property Animator能实现补间动画无法实现的功能

View Animation仅能对指定的控件做动画,而Property Animator是通过改变控件某一属性值来做动画的。

补间动画虽能对控件做动画,但并没有改变控件内部的属性值。而Property Animator则是恰恰相反,Property Animator是通过改变控件内部的属性值来达到动画效果的

View Animation和PropertyAnimation有什么不同?

1、引入时间不同:View Animation是API Level 1就引入的。Property Animation是API Level 11引入的,即Android 3.0才开始有Property        Animation相关的API。

2、所在包名不同:View Animation在包android.view.animation中。而Property Animation API在包 android.animation中。

3、动画类的命名不同:View Animation中动画类取名都叫XXXXAnimation,而在Property Animator中动画类的取名则叫XXXXAnimator

Tween Animation有四种形式:

l  alpha              渐变透明度动画效果

l  scale               渐变尺寸伸缩动画效果

l  translate         画面位置移动动画效果

l  rotate              画面旋转动画效果

使用方法

Tween动画的实现原理

通过view的matrix和alpha变量对view进行修改,但是并不会修改view自身属性。

Frame Animation

Frame Animation是顺序播放事先做好的图像,跟电影类似。不同于animation package,Android SDK提供了另外一个类AnimationDrawable来定义使用Frame Animation。

这里有点不同的是,利用AnimationDrawable实现动画时,本身并没有提供接口来监听动画的状态(开始,结束),需要自己处理。

Property Animation  包括ValueAnimator和ObjectAnimator;

ValueAnimator和ObjectAnimator有什么不同?

ValueAnimator只不过是对值进行了一个平滑的动画过渡,而ObjectAnimator就不同了,它是可以直接对任意对象的任意属性进行动画操作的,比如说View的alpha属性。虽说ObjectAnimator会更加常用一些,但是它其实是继承自ValueAnimator的,底层的动画实现机制也是基于ValueAnimator来完成的

ObjectAnimator  动画的执行类

为了能让动画直接与对应控件相关联,以使我们从监听动画过程中解放出来,谷歌的开发人员在ValueAnimator的基础上,又派生了一个类ObjectAnimator;

ObjectAnimator做动画,并不是根据控件xml中的属性来改变的,而是通过指定属性所对应的set方法来改变的

(1)、setRotationX、setRotationY与setRotation

      setRotationX(float rotationX):表示围绕X轴旋转,rotationX表示旋转度数

      setRotationY(rotationY):表示围绕Y轴旋转,rotationY表示旋转度数

      setRotation(float rotation):表示围绕Z旋转,rotation表示旋转度数

(2)、setTranslationX与setTranslationY 

    setTranslationX(float translationX) :表示在X轴上的平移距离,以当前控件为原点,向右为正方向,参数translationX表示移动的距离。

    setTranslationY(float translationY) :表示在Y轴上的平移距离,以当前控件为原点,向下为正方向,参数translationY表示移动的距离。

(3)、setScaleX与setScaleY

  setScaleX(float scaleX):在X轴上缩放,scaleX表示缩放倍数

  setScaleY(float scaleY):在Y轴上缩放,scaleY表示缩放倍数

ObjectAnimator

ValueAnimator 动画的执行类

这个Animation是针对值的!ValueAnimator不会对控件做任何操作 我们可以给它设定从哪个值运动到哪个值,通过监听这些值的渐变过程来自己操作控件。以前我们曾讲过Scroller类,Scroller类也是不会对控件操作的,也是通过给他设定滚动值和时长,它会自己计算滚动过程,然后我们需要监听它的动画过程来自己操作控件,ValueAnimator的原理与Scroller类相似 

第一步:创建ValueAnimator实例

创建实例

ValueAnimator.ofInt创建了一个值从0到400的动画,动画时长是1s

第二步:添加监听

AnimatorListener

AnimatorListener中,主要是监听Animation的四个状态,start、end、cancel、repeat;当动画开始时,会调用onAnimationStart(Animator animation)方法,当动画结束时调用onAnimationEnd(Animator animation),当动画取消时,调用onAnimationCancel(Animator animation)函数,当动画重复时,会调用onAnimationRepeat(Animator animation)函数。

AnimatorUpdateListener

监听动画的实时变化状态

三、移除监听

针对AnimatorUpdateListener和AnimatorListener,每个监听器都有两个方法来移除

PropertyValuesHolder与Keyframe

ValueAnimator和ObjectAnimator除了通过ofInt(),ofFloat(),ofObject()创建实例外,还都有一个ofPropertyValuesHolder()方法来创建实例

PropertyValuesHolder 这个类的意义就是,它其中保存了动画过程中所需要操作的属性和对应的值

AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。

插值器

插值器,也叫加速器 是用来控制动画区间的值被如何计算出来的Interpolator 属性是Animation类的一个XML属性 所以alpha、scale、rotate、translate、set都会继承得到这个属性。Interpolator被译为插值器 其实他是一个指定动画如何变化的东东,跟PS里的动作有点类似

Evaluator  就是将从加速器返回的数字进度转成对应的数字值。

Evaluator    其实就是一个转换器,他能把小数进度转换成对应的数值位置

二、scale标签 缩放(从控件中心点,从0放大到1.4倍,保持结束时的状态)

三、rotate标签 旋转(从控件中心点,从0放大到1.4倍,保持结束时的状态)

四、alpha标签 (将透明度从0变成1.0) 


五、translate标签 位移(把控件从(0,0)平移到(-200,-200)的位置,保持结束时状态不变)

Animation类是所有动画(scale、alpha、translate、rotate)的基类,

ScaleAnimation 缩放

AlphaAnimation 透明度

RotateAnimation 旋转

TranslateAnimation 位移

AnimationSet 定义动作类的集合 它是没有XML属性的

同样效果的JAVA代码

alphaAnim =newAlphaAnimation(1.0f,0.1f);

scaleAnim =newScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

rotateAnim =newRotateAnimation(0,720, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);

setAnim=newAnimationSet(true);

setAnim.addAnimation(alphaAnim);

setAnim.addAnimation(scaleAnim);

setAnim.addAnimation(rotateAnim);

setAnim.setDuration(3000);

setAnim.setFillAfter(true);


AnimatorInflater 用户加载属性动画的xml文件

TypeEvaluator  类型估值,主要用于设置动画操作属性的值。

TimeInterpolator 时间插值,上面已经介绍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容