android动画具体解释四 创建动画

使用ValueAnimator进行动画

通过指定一些int, float或color等类型的值的集合。ValueAnimator 使你能够对这些类型的值进行动画。你需通过调用ValueAnimator 的某个工厂方法来获得一个ValueAnimator 对象。比方:ofInt(), ofFloat(), 或 ofObject()。比如:

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.start();    

此段代码中,当start()方法运行时,開始计算在1000 ms中处于0和1之间的动画的值。

你也能够按下面方式指定一个自己定义类型来进行动画:

ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
animation.setDuration(1000);
animation.start();

在此段代码中, ValueAnimator 在 start() 方法运行时,開始计算在1000 ms 中处于startPropertyValue 和endPropertyValue 之间的动画的值,使用MyTypeEvaluator 提供的计算逻辑。

然而,在上面代码片段中,实际上对对象没有不论什么影响。由于ValueAnimator 不直接操作对象或属性。你应该自己跟据所计算出的值自己改动对象。你能够定义一个监听器来处理动画过程中ValueAnimator的重要事件们,比方更新帧。

当实现了监听器们。你就能够在帧刷新时通过调用getAnimatedValue()获得动画的值。

使用ObjectAnimator进行动画

ObjectAnimator 是ValueAnimator 的一个子类而且合并了时间引擎和ValueAnimator的计算能力来动画一个对象的属性,这个属性通过名字指定。

这使得动画一个对象更加easy,由于你不再须要实现ValueAnimator.AnimatorUpdateListener,由于要动画的属性是自己主动更新的。

实例化ObjectAnimator 和实例化ValueAnimator非常类似,可是你还须要指定对象和对象的属性的名字:

ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
anim.setDuration(1000);
anim.start();

要使ObjectAnimator 能正确的更新属性。你必须按下面去做:

· 你要动画的对象的属性必须具有一个setter函数,像这个样子:set<propertyName>()。 由于 ObjectAnimator 在动画期间会自己主动更新属性,必须能通过此setter方法操作目标属性。比如,假设属性的名字是foo,你必须具有一个setFoo()方法。假设此方法不存在,你有三个选择:

· 假设能够,你自己加入setter方法(废话)。

· 用另外一个类封装此对象的类,于是你就有了改写权力了。在封装类中加入操作原始类的属性的setter。

· 改用 ValueAnimator。

· 假设在ObjectAnimator 的某个工厂方法中,你仅仅指定了一个values...參数。这个參数就被视为动画的结束值。

因此,你动画的对象属性必须具有一个getter方法,用于获取開始值。getter方法必须具有get<propertyName>()样的格式。

比如。假设属性名是foo,你须要带有一个getFoo()方法。

· 你要动画的属性的getter (假设须要)和setter方法处理的数据类型必须跟你为ObjectAnimator指定的開始和结束值的类型同样。比如,假设你创建例如以下的ObjectAnimator,你必须具有targetObject.setPropName(float)方法和targetObject.getPropName(float)方法:

ObjectAnimator.ofFloat(targetObject, "propName", 1f)

· 跟据动画的对象和属性的不同。你可能须要调用View的invalidate()方法来强制屏幕使用新的动画数据重绘自己。你应在onAnimationUpdate() 回调中这样做。比如。动画一个Drawable对象的color属性导致仅在对象重绘自己时才更新屏幕。View的全部的属性setter,比方setAlpha()和setTranslationX(),都会使View无效,所以你不须要在调用这些方法时使View无效 。

使用AnimatorSet组合多个动画

非常多情况下,你可能想播放一个动画,它的播放时机依赖于其他动画的開始时间或结束时间。Android系统同意你绑定多个动画到一个AnimatorSet中,于是你能够指定是否同一时候播放。或分别播放。或某个延迟后再播放。你还能够相互嵌套各AnimatorSet对象。

下面的演示样例代码是从样例Bouncing Balls 中拿来的 (小改了一下下)。它以这种方式播放下列动画对象:

1. 播放 bounceAnim.

2. 同一时候播放 squashAnim1, squashAnim2, stretchAnim1, 和 stretchAnim2 。

3. 播放 bounceBackAnim.

4. 播放 fadeAnim.

AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).before(squashAnim1);
bouncer.play(squashAnim1).with(squashAnim2);
bouncer.play(squashAnim1).with(stretchAnim1);
bouncer.play(squashAnim1).with(stretchAnim2);
bouncer.play(bounceBackAnim).after(stretchAnim2);
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();

上一篇:android动画具体解释三 动画API概述

下一篇:android动画具体解释五 layout,插值与评估器

时间: 2024-10-26 08:37:54

android动画具体解释四 创建动画的相关文章

android动画详解四 创建动画

· 使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合,ValueAnimator 使你可以对这些类型的值进行动画.你需通过调用ValueAnimator 的某个工厂方法来获得一个ValueAnimator 对象,比如:ofInt(), ofFloat(), 或 ofObject().例如: ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f); animation.setDuration

android动画具体解释二 属性动画原理

property动画是一个强大的框架,它差点儿能使你动画不论什么东西. 你能够定义一个动画来改变对象的不论什么属性,不论其是否被绘制于屏幕之上. 一个属性动画在一定时间内多次改变一个属性(对象的一个字段)的值.要动画某个东西.你需指定对象的目标属性.比方位置,动画的持续时间.和改变的值的范围. 属性动画系统同意你指定下面动画属性: · Duration: 动画持续时间. 默认是300 ms. · Time interpolation: 你能够指定一个函数来定义怎样跟据当前的时间计算属性的值. ·

android动画之:补间动画(Tween动画)

android中Tween动画实现原理:通过对View的内容进行图形变换 (平移.缩放.旋转.透明度)的改变来实现动画效果.动画效果的定义可用XML来做也可以采用编码来做,今天简单讲下用代码来实现Tween动画中的四种动画方式.四种动画分别对就四个动画类: 渐变透明度动画效果 AlphaAnimation 渐变尺寸缩放动画效果 ScaleAnimation 画面位置移动动画效果 TranslateAnimation 画面旋转动画效果 RotateAnimation 1:平移操作 /**Trans

cocos2dx中创建动画的三种方法

1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg) CCSpriteFrame *frame1=CCSpriteFrame::create("1.png"); CCSpriteFrame *frame2=CCSpriteFrame::create("2.png"); CCSpriteFrame *frame3=CCS

创建动画和移动相机

1.如何通过鼠标获取网格对象 首先需要把鼠标的起始位置在左上角的屏幕坐标转换为笛卡尔坐标.然后将坐标转为为以Camera为中心点的三维空间坐标.接下来根据摄像头位置和鼠标位置的法向量创建射线对象.最终根据射线对象的intersectObjects函数确认哪个网格被选中. 下面是比较经典的使用方法: function onDocumentMouseMove(event) { if (controls.showRay) { var vector = new THREE.Vector3(( event

Android图文具体解释属性动画

Android中的动画分为视图动画(View Animation).属性动画(Property Animation)以及Drawable动画.从Android 3.0(API Level 11)開始.Android開始支持属性动画,本文主要解说怎样使用属性动画. 关于视图动画能够參见博文<Android四大视图动绘图文具体解释>. 概述 视图动画局限比較大.例如以下所述: 视图动画仅仅能使用在View上面. 视图动画并没有真正改变View相应的属性值,这导致了UI效果与实际View状态存在差异

android动画具体解释六 XML中定义动画

动画View 属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,由于View本身没有要操控的属性.结果就是View被动画了.但View对象本身并没有变化. 在Android3.0中,新的属性和对应的getter和setter方法被增加以克服此缺点. 属性动画系统能够通过改变View对象的真实属性来动画Views. 并且.View也会在其属性改变时自己主动调用invalidate(

Android UI开发第四十三篇——使用Property Animation实现墨迹天气3.0引导界面及动画实现

前面写过<墨迹天气3.0引导界面及动画实现>,里面完美实现了动画效果,那一篇文章使用的View Animation,这一篇文章使用的Property Animation实现.Property Animation是Android3.0以后新增的动画库. 这篇文章的源码以及效果在github. 实现墨迹天气向上滑动的viewpager使用的开源库ViewPager-Android.ViewPager-Android开源库设置app:orientation定义滑动方向. 墨迹天气引导界面共有4个视图

android四种动画

http://www.jb51.net/article/32339.htm android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解ScaleAnimation 动画, ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType,