属性动画基础之ValueAnimator

概述

属性动画是谷歌在android3.0(API level 11)时候给我们带来了属性动画,真正意义上带来了”动画“,以前的帧动画也就4中效果的组合(旋转、淡入淡出、放大缩小、平移),而且只是表面的动画,最经典的比如,把一个button按钮移动到另一个位置,然后去点击,一点反应都没有,但是点击原来空白位置仍然有点击事件触发前一篇博客就提到这个问题(传动动画)。而属性动画彻彻底底解决这个问题。属性动画分为valueAnimator和ObjectAnimator两大类,这里简单总结下valueAnimator,毕竟基础不牢地动山摇。

使用

  • 创建实例
 int end = etInput.getText().toString().equals("") ? 0 : Integer.valueOf(etInput.getText().toString());final ValueAnimator valueAnimator = ValueAnimator.ofInt(0, end);

可以使用ofIntofFloatofArgb,复杂的有还有俩个ofObject,ofPropertyValuesHolder 
- 添加监听 
主要分为俩大类 
(1)addUpdateListener监听值的变化通过getAnimatedValue()就可以获取当前变化的值

 valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {int curValue = (int) valueAnimator.getAnimatedValue();tvShow.setText(String.valueOf(curValue));}});

(2)监听动画状态变化 
主要分为start,end,cancel,repeat

       //增加监听器valueAnimator.addListener(new Animator.AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {Log.d("xsf", "animation start");}@Overridepublic void onAnimationEnd(Animator animation) {Log.d("xsf", "animation end");}@Overridepublic void onAnimationCancel(Animator animation) {Log.d("xsf", "animation cancel");}@Overridepublic void onAnimationRepeat(Animator animation) {Log.d("xsf", "animation repeat");}});

有时候我们仅仅需要对其中一个状态进行监听,这时可以使用AnimatorListenerAdapter()

        //增加指定的监听器valueAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {Log.d("xsf", "animation end");}

ofObject

ofInt和ofFloat传递整形和浮点型数值,ofArgb传递颜色数值,若是有自定义类型则可以使用ofObjetc

    public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values);  

这里需要自定义的Evaluator和Object类型的可变长参数。由于object是自己定义的,因此从当前动画执行进度到下次对应值的过称系统并不会知道,因此需要实现TypeEvaluator接口demo中valueOfObjActivity有个小例子

ofPropertyValuesHolder()

通常可以用来同时变化一个View的多个属性,可以使用这个方法,这个目前没有深入研究,基本用法如下

PropertyValuesHolder valuesHolder = PropertyValuesHolder.ofFloat('translationX', 0.0f, 300.0f);
PropertyValuesHolder valuesHolder1 = PropertyValuesHolder.ofFloat('scaleX', 1.0f, 1.5f);
PropertyValuesHolder valuesHolder2 = PropertyValuesHolder.ofFloat('rotationX', 0.0f, 90.0f, 0.0F);
PropertyValuesHolder valuesHolder3 = PropertyValuesHolder.ofFloat('alpha', 1.0f, 0.3f, 1.0F);ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(imageView, valuesHolder, valuesHolder1, valuesHolder2, valuesHolder3);objectAnimator.setDuration(2000).start()

可以参考 
http://www.cnblogs.com/mengdd/archive/2013/09/06/3305698.html 
http://www.admin10000.com/document/4926.html

插值器

可以参考我以前的一篇博文http://blog.csdn.net/xsf50717/article/details/50472341

其他

  • setDuration()、getAnimatedValue()、start()
  • setRepeatCount()、setRepeatMode()、cancel() 
    其中setRepeatCount(int value)用于设置动画循环次数,设置为0表示不循环,设置为ValueAnimation.INFINITE表示无限循环。 setRepeatMode(int value)用于设置循环模式,取值为ValueAnimation.RESTART时,表示正序重新开始,当取值为ValueAnimation.REVERSE表示倒序重新开始。

  • setStartDelay(long startDelay)、clone() 
    第一个非常容易理解,就是设置多久后动画才开始。clone表示复制出来一个完全一样的新的ValueAnimator实例出来

例子

输入一个数字,然后从0到数字逐渐增大的示例 
这里写图片描述

demo传送门


转载:http://blog.csdn.net/xsf50717/article/details/51153480

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#Pragma Pack(n)与内存分配 pragma pack(push,1)与#pragma pack(1)的区别

from:http://blog.csdn.net/mylinx/article/details/7007309 #pragma pack(n) 解释一: 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n1,2,4,8,16来改变这一系数,…

ShowDoc的搭建

其实,官方文档也说的很清楚了。主要贴一下我遇见的问题。环境:LNMP(LAMP没试过,有兴趣的同学可以试试,然后发出来)PHP5.3以上版本、php-mbstring模块、php-pdo模块、mysql数据库克隆或者下载代码&#xff1…

BroadcastReceiver

本文介绍Broadcast Receiver,包括几部分内容:Broadcast Receiver概述及实例、自定义Broadcast Receiver、Broadcast Receiver的实现细节、生命周期等。 csdn貌似今天出问题了,无法上传图片。 资料来源:最牛网,《官方解…

MFC CPropertySheet 多页面切换 实例

为了能实现在同一个页面实现多个页面的切换效果。CPropertySheet要与CPropertyPage一起使用。 首先 新建一个MFC工程--MFC AppWizard(exe), 取名Pagesheet, 选择Dialog based, 然后Finish. 2. 在对话框资源中插入两个对话框IDD_DIALOG1、IDD_DIALOG2,作为…

动画类的层次结构

CASpringAnimation类是CAABasicAnimation的子类 CAPropertyAnimation :是CAAnimation的子类,它支持动画地显示图层的keyPath,一般不直接使用。 iOS9.0之后新增CASpringAnimation类,它实现弹簧效果的动画,是CABasicAnim…

[原]小命令大作用:modprobe

调整网络为绑定模式,但启动时候会报错,此时执行命令 modprobe bonding 可以解决问题。 之前在磁盘方面遇到问题也是通过modprobe命令解决的,又遇到这个命令,似曾相识。于是看下该命令: Linux命令:modprobe …

setup2go制作安装程序

QT程序设计完毕时,我们就要发布自己的程序,发布程序有两种方法:一是静态编译,二是制作程序安装包。 静态编译好麻烦,我从来没有成功过,所以我用了动态编译方法,设计完成时,用release…

数据结构比较型排序算法分析及选择

比较型算法分为五类: 1、插入排序:直接插入排序、折半插入排序、希尔排序; 2、选择排序:直接选择排序、堆排序; 3、交换排序:快速排序、冒泡排序; 4、归并排序; 5、基数排序&#xf…

Frequent Pattern 挖掘之二(FP Growth算法)(转)

FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对。为了达到这样的效果,它采用了一种简洁的数据结构,叫做frequent-pattern tree(频繁…

Sublime 解决目录显示为方块的问题

2019独角兽企业重金招聘Python工程师标准>>> 修改Perferences->Settings-User { "font_face": "Consolas Italic", #传说这个字体比较好看。 "font_size": 15, "ignored_packages": [ "Vintage" ], "dpi…

VS toolTip1控件的使用1

http://blog.csdn.net/Mr_Liyong/article/details/780141381、在工具栏找到“toolTip”控件后拖到窗体后,窗体下方会显示此控件则拖放成功。 2、单击此控件右键选择属性:开始 修改属性。 3、当添加一个TOOLTIP控件后,在WINFORM界面上所有的控…

【TL】【编码】瞬间移动-百度之星初赛(Astar Round2B)1003-2016.05.22

瞬间移动 Accepts: 1018 Submissions: 3620Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个…

dom解析xml

为什么80%的码农都做不了架构师?>>> 转载自:http://www.cnblogs.com/shenliang123/archive/2012/05/11/2495252.html 使用eclipse需要手动导入crimson.jar包 org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单&#xff0c…

逃离北上广:你以为回到小城市就非常幸福了吗?

忘记在哪儿看的了。感觉不错,随手发出来。我博客也有更新,底下有留个人博客链接 在过去几年里。“逃离北上广”一直是一个热门短语。拿我自己来说,工作在上海,但又不是上海人。毕业后,就选择租房,首先就为这…

[WinForm] VS2010发布、打包安装程序(超全超详细)

from: http://blog.csdn.net/y13156556538/article/details/555321841、 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: (如果是在solution中添加,就直接solution -- 右键 -- 添加project&#…

【译】什么导致了Context泄露:Handler内部类

思考下面代码 1 public class SampleActivity extends Activity { 2 3 private final Handler mLeakyHandler new Handler() { 4 Override 5 public void handleMessage(Message msg) { 6 // ... 7 } 8 } 9 } 如果没有仔细观察,上面的代码…

苹果应用上架遇到的问题(2017年4月27日)

在更新app store的时候报(如图): ERROR ITMS-90086: "Missing 64-bit support. iOS apps submitted to the App Store must include 64-bit support and be built with the iOS 8 SDK or later. We recommend using the default "S…

工作者对象HttpWorkerRequest

在ASP.NET中,用于处理的请求,需要封装为HttpWorkerRequest类型的对象。该类为抽象类,定义在命名空间System.Web下。 #region Assembly System.Web.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFr…

苹果应用上架,一些信息的勾选(2017年4月27日)

1、分级的各种选项的选择全部选否 (我们公司是医疗相关的app,医疗的选项也是选择的否) 2、

C# 线程池ThreadPool

什么是线程池?为什么要用线程池?怎么用线程池? 1. 什么是线程池?.NET Framework的ThreadPool类提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。那么什么是线程池…