属性动画基础之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);
可以使用ofInt,ofFloat,ofArgb,复杂的有还有俩个ofObject,ofPropertyValuesHolder
- 添加监听
主要分为俩大类
(1)addUpdateListener监听值的变化通过getAnimatedValue()就可以获取当前变化的值
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int curValue = (int) valueAnimator.getAnimatedValue();
tvShow.setText(String.valueOf(curValue));
}
});
(2)监听动画状态变化
主要分为start,end,cancel,repeat
//增加监听器
valueAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Log.d("xsf", "animation start");
}
@Override
public void onAnimationEnd(Animator animation) {
Log.d("xsf", "animation end");
}
@Override
public void onAnimationCancel(Animator animation) {
Log.d("xsf", "animation cancel");
}
@Override
public void onAnimationRepeat(Animator animation) {
Log.d("xsf", "animation repeat");
}
});
有时候我们仅仅需要对其中一个状态进行监听,这时可以使用AnimatorListenerAdapter()
//增加指定的监听器
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public 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传送门
属性动画基础之ValueAnimator的更多相关文章
- Android 属性动画ObjectAnimator和ValueAnimator讲解
区别: ObjectAnimator 是直接对某个view进行更改. ValueAnimator 根据 TimeInterpolator 在不断产生相应的数据,来传进view ,view自己做改变. ...
- Android基础夯实--重温动画(五)之属性动画 ObjectAnimator详解
只有一种真正的英雄主义 一.摘要 ObjectAnimator是ValueAnimator的子类,它和ValueAnimator一样,同样具有计算属性值的功能,但对比ValueAnimator,它会更 ...
- Android属性动画完全解析(上),初识属性动画的基本用法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系 ...
- Android中PropertyAnimation属性动画详解(一)
在之前的文章中已经讲了帧动画frame-by-frame animation和补间动画tweened animation,其实这两种动画原理好简单,都是按照预先固定的动画模式来播放的,帧动画将一张张单 ...
- Android基础夯实--重温动画(四)之属性动画 ValueAnimator详解
宝剑锋从磨砺出,梅花香自苦寒来:千淘万漉虽辛苦,吹尽狂沙始到金: 长风破浪会有时,直挂云帆济沧海 一.摘要 Animator类作为属性动画的基类,它是一个抽象类,它提供了实现动画的基本架构,但是我们不 ...
- 属性动画 ValueAnimator 运行原理全解析
最近下班时间都用来健身还有看书了,博客被晾了一段时间了,原谅我~~~~ 提问环节 好,废话不多说,之前我们已经分析过 View 动画 Animation 运行原理解析,那么这次就来学习下属性动画的运行 ...
- Android 属性动画框架 ObjectAnimator、ValueAnimator ,这一篇就够了
前言 我们都知道 Android 自带了 Roate Scale Translate Alpha 多种框架动画,我们可以通过她们实现丰富的动画效果,但是这些宽家动画却有一个致命的弱点,它们只是改变了 ...
- 【Android - 基础】之Animator属性动画
1 概述 在3.0系统之前,Android给我们提供了逐帧动画Frame Animation和补间动画Tween Animation两种动画: 1) 逐帧动画的原理很简单,就是 ...
- 属性动画ValueAnimator用法
用法举例: 1. ValueAnimator animator = ValueAnimator.ofInt(0,100);//定义animator 2. animator.addUpdateListe ...
随机推荐
- Linux--Web应用服务和MySQL数据库
(1) WWW是一种交互式图形界面的Internet服务,具有强大的信息连接功能,是 人们在网上查找.浏览信息的主要手段.它使得成千上万的用户通过简单的 图形界面就可以获取各个大学.组织.公司 ...
- Spark技术内幕:究竟什么是RDD
RDD是Spark最基本,也是最根本的数据抽象.http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf 是关于RDD的论文.如果觉得英 ...
- Dynamics CRM Import Solution Attribute Display Name description is null or empty
在做解决方案导入的时候遇到错误,下载错误xml信息后查询报错如下:"Attribute Display Name description is null or empty",字面意 ...
- 财务模块多组织,GL, SLA, SOB, COA, BSV, CCID, LE 概念的简单介绍
GL= General Ledger 指的是Oracle 的总帐系统. application_id = 101. 在uk似乎居然还有不同的解释(In the UK, it was refer ...
- ceil和floor函数的编程实践
ceil()向上取整 floor向下取整 题目 在最近几场魔兽争霸赛中,赫柏对自己的表现都不满意. 为了尽快提升战力,赫柏来到了雷鸣交易行并找到了幻兽师格丽,打算让格丽为自己的七阶幻兽升星. 经过漫长 ...
- Android 实现图片加水印
加水印代码 public Bitmap addWaterMark(Bitmap src, String water, Context context){ Bitmap tarBitmap = src. ...
- 剑指Offer——全排列递归思路
剑指Offer--全排列递归思路 前言 全排列,full permutation, 可以利用二叉树的遍历实现.二叉树的递归遍历,前中后都简洁的难以置信,但是都有一个共同特点,那就是一个函数里包含两次自 ...
- 05 利用Appliction 传值Activity
步骤一:新建一个类继承Application必须是public class 不然直接奔溃 步骤二:在清单文件AndroidManifest.xml的application添加name属性 值为com. ...
- Linux常用网络命令整理
Linux上有一些非常常用的命令,来帮助我们监控网络状况. 1.Tcpdump命令 tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机 ...
- 详解EBS接口开发之库存事务处理批次更新
库存事务处理批次有时候出现导入错误需要更新可使用次程序更新,批次导入可参考博客 详解EBS接口开发之库存事务处理-物料批次导入 http://blog.csdn.net/cai_xingyun/art ...