• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > android动画详解四 创建动画浅析

android动画详解四 创建动画浅析

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android动画详解,android属性动画详解,android service详解,android布局详解,android.mk详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

android动画详解四 创建动画浅析


·使用ValueAnimator进行动画

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

 

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

 

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

你也可以按以下方式指定一个自定义类型来进行动画:

 

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

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

然而,在上面代码片段中,实际上对对象没有任何影响,因为ValueAnimator不直接操作对象或属性。你应该自己跟据所计算出的值自己修改对象。你可以定义一个监听器来处理动画过程中ValueAnimator的重要事件们,比如更新帧。当实现了监听器们,你就可以在帧刷新时通过调用getAnimatedValue()获得动画的值。

 

·使用ObjectAnimator进行动画

 

ObjectAnimator是ValueAnimator的一个子类并且合并了时间引擎和ValueAnimator的计算能力来动画一个对象的属性,这个属性通过名字指定。这使得动画一个对象更加容易,因为你不再需要实现ValueAnimator.AnimatorUpdateListener,因为要动画的属性是自动更新的。

实例化ObjectAnimator和实例化ValueAnimator很相似,但是你还需要指定对象和对象的属性的名字:

 

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

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

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

·如果可以,你自己添加setter方法(废话)。

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

·改用ValueAnimator。

·如果在ObjectAnimator的某个工厂方法中,你只指定了一个values...参数,这个参数就被视为动画的结束值。因此,你动画的对象属性必须具有一个getter方法,用于获取开始值。getter方法必须具有get()样的格式。例如,如果属性名是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对象。

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

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();
 </div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解Android微信登录与分享,详解android分享
  • Android 动画资源 详解
  • android 动画详解(二)
  • Android 中的长度单位详解
  • Android pendingInten 用法详解
  • android动画详解四 创建动画浅析
  • android动画详解三 动画API概述
  • android动画详解一 概述
  • Android动画原理总结
  • Android 蓝牙操作详解,android蓝牙详解

相关文章

  • 2017-05-26[原创]Eclipse 安卓开发几个异常的处理办法,eclipse安卓
  • 2017-05-26高效地分析Android内存--MAT工具解析
  • 2017-05-26二维码积分兑换商城,积分兑换商城
  • 2017-05-26ConfigParser写配置文件乱序问题
  • 2017-05-26Xamarin.Android 的照相機使用,xamarin.android
  • 2017-05-26android--获取屏幕高宽度工具类,android--工具类
  • 2017-05-26Handler,Looper,HandlerThread浅析,handlerthreadlooper
  • 2017-05-26Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用,
  • 2017-05-26android:giavity和layout_gravity的区别
  • 2017-05-26Android从网上下载图片

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Shell 下求两个文件交集、并集和差集的办法
    • [Android] 使用ViewPager 实现导航,androidviewpager
    • 硅谷新闻4--解决页签手指按下从左到右滑动的bug,硅谷4--
    • 基于Ionic+Cordova+Bmob的开源项目实战
    • android graphic(15)—fence
    • Android Studio(Mac版本)最常用的快捷键
    • Android入门(1)--下载安装Android Studio,androidstudio
    • Android 利用xUtils框架实现对sqllite的增删改查,xutilssqllite
    • 精品干货丨APP常用导航框架,干货丨app导航
    • 使用phonegap播放音频,phonegap播放音频

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有