转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118699073
本文出自【赵彦军的博客】

文章目录

  • ValueAnimator
  • 例子1: 透明度渐变
  • 例子2:倒计时

ValueAnimator

Animator 是一个抽象类

public abstract class Animator implements Cloneable {public void start() {}public void cancel() {}public void end() {}......
}

ValueAnimator

public class ValueAnimator extends Animator implements AnimationHandler.AnimationFrameCallback {}

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

但是ValueAnimator的用法却一点都不复杂,我们先从最简单的功能看起吧,比如说想要将一个值从0平滑过渡到1,时长300毫秒,就可以这样写:

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.setDuration(300);
anim.start()

怎么样?很简单吧,调用ValueAnimatorofFloat()方法就可以构建出一个ValueAnimator的实例,ofFloat()方法当中允许传入多个float类型的参数,这里传入0和1就表示将值从0平滑过渡到1,然后调用ValueAnimator的setDuration()方法来设置动画运行的时长,最后调用start()方法启动动画。

用法就是这么简单,现在如果你运行一下上面的代码,动画就会执行了。可是这只是一个将值从0过渡到1的动画,又看不到任何界面效果,我们怎样才能知道这个动画是不是已经真正运行了呢?这就需要借助监听器来实现了,如下所示:

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.setDuration(300);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float currentValue = (float) animation.getAnimatedValue();Log.d("TAG", "cuurent value is " + currentValue);}
});
anim.start();

可以看到,这里我们通过addUpdateListener()方法来添加一个动画的监听器,在动画执行的过程中会不断地进行回调,我们只需要在回调方法当中将当前的值取出并打印出来,就可以知道动画有没有真正运行了。运行上述代码,控制台打印如下所示:


从打印日志的值我们就可以看出,ValueAnimator确实已经在正常工作了,值在300毫秒的时间内从0平滑过渡到了1,而这个计算工作就是由ValueAnimator帮助我们完成的。另外ofFloat()方法当中是可以传入任意多个参数的,因此我们还可以构建出更加复杂的动画逻辑,比如说将一个值在5秒内从0过渡到5,再过渡到3,再过渡到10,就可以这样写:

ValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 10f);
anim.setDuration(5000);
anim.start();

当然也许你并不需要小数位数的动画过渡,可能你只是希望将一个整数值从0平滑地过渡到100,那么也很简单,只需要调用ValueAnimator的ofInt()方法就可以了,如下所示:

ValueAnimator anim = ValueAnimator.ofInt(0, 100);

ValueAnimator当中最常用的应该就是ofFloat()ofInt()这两个方法了,另外还有一个ofObject()方法,我会在下篇文章进行讲解。

那么除此之外,我们还可以调用setStartDelay()方法来设置动画延迟播放的时间,调用setRepeatCount()setRepeatMode()方法来设置动画循环播放的次数以及循环播放的模式,循环模式包括RESTARTREVERSE两种,分别表示重新播放和倒序播放的意思。这些方法都很简单,我就不再进行详细讲解了。

例子1: 透明度渐变

Viewalpha值,从 1 -- 0.4

 val progress: ValueAnimator = ValueAnimator.ofFloat(1f, 0.4f)progress.duration = 1000progress.addUpdateListener {val currentValue: Float = it.animatedValue as Floatview.alpha = currentValue
}
progress.start()

例子2:倒计时

val progress: ValueAnimator = ValueAnimator.ofInt(60, 0)
progress.duration = 6000  //6秒
progress.startDelay = 500
progress.interpolator = LinearInterpolator()
progress.addUpdateListener {val currentValue: Int = it.animatedValue as Intbutton.text = "$currentValue"
}
progress.start()

Android属性动画 ValueAnimator相关推荐

  1. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...

  2. android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...

    大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了 ...

  3. Android属性动画 ObjectAnimator

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118709616 本文出自[赵彦军的博客] 文章目录 ObjectAnimator ...

  4. Android 系统(196)---Android 属性动画

    Android 属性动画 属性动画 总结&攻略 前言 动画的使用 是 Android 开发中常用的知识 本文将详细介绍 Android 动画中 属性动画的原理 & 使用 动画类型 关于 ...

  5. Android 属性动画Property Animation(中)

    Android 属性动画Property Animation(上)介绍了属性动画的概念以及相关的类和接口,本篇来看下具体肿么使用. ValueAnimator ValueAnimator指定整形.浮点 ...

  6. Android 属性动画使用(二)

    首先扯点别的:晚上稍微跑了一会步,然后逛了超市,晚饭喝的南瓜粥,吃了一碗面条,今天不是太饿,现在正一边吃着葡萄一边学习,也是没谁了. 比如说,我们想要实现从0过渡到100,使用ValueAnimato ...

  7. android+属性动画+高度,android 自定义view+属性动画实现充电进度条

    近期项目中需要使用到一种类似手机电池充电进度的动画效果,以前没学属性动画的时候,是用图片+定时器的方式来完成的,最近一直在学习动画这一块,再加上复习一下自定义view的相关知识点,所以打算用属性动画和 ...

  8. Android 属性动画(一)新手入门

    一.属性动画简介 Android 中动画有很多种,属性动画就是其中的一种.所谓的属性动画,就是在指定的时间内,通过改变对象的属性达到变化效果的动画.在 Android 中,属性动画系统是一个强健的框架 ...

  9. Android 属性动画 详解

    Android 属性动画 详解 Android动画类型: View Animation(即所谓的Tween Animation补间动画):View Animation相当简单,不过只能支持简单的缩放. ...

最新文章

  1. [转]关于重定向RedirectAttributes的用法
  2. python操作yaml的方法详解
  3. Linux内核学习资料
  4. 可重入函数与不可重入函数(转)
  5. SpringBoot实战(十一)之与JMS简单通信
  6. Mac Go 国内加速镜像
  7. python 列表中dict中key排序
  8. scrapy使用meta在各个模块的组件之间传递数据
  9. 如何用编程方式实现创建一个页面并替换掉站点首页
  10. 11.05面向对象 封装
  11. 【FPGA-ASK调制解调】2-ASK调制和解调的Verilog代码实现
  12. 三星emcp型号详解_三星emcp型号详解_eMCP终将成为过去式?解析:三星、美光所推出的uMCP为何物?......
  13. 2022Java后端之美团笔试题
  14. CPU在计算机领域的含义,电脑中的CPU是什么意思
  15. 企业级Jumpserver的部署与使用-行癫亲测
  16. 四川川之音文化传媒有限公司:电商物流运行呈加快恢复态势
  17. 记录大疆研发管理岗初面
  18. 游戏黑客圣经GHB1学习笔记 part1(1-5)
  19. 扇贝python_【扇贝批量添加单词到词库】利用python调用扇贝API (oauth2)
  20. verilog 中的冒泡排序法

热门文章

  1. java 位运算符赋值_java-运算符(算术、赋值 =、关系、逻辑、三元、位运算符)...
  2. 三十九、Java集合中的HashSet和TreeSet
  3. 六十一、分析Springboot中的项目结构介绍
  4. kaggle研究生招生(中)
  5. 5 多数据save_《Netlogo多主体建模入门》笔记 7
  6. TCSVT | 横看成岭侧成峰:交叉视角地理定位
  7. 2018年4月1日 蓝桥杯 C/C++B组答案 递增三元组
  8. 学习《送东阳马生序》
  9. googlehelper手机版ios_二次元漫画控iOS苹果手机版下载v1.0.0下载|免费二次元漫画控iOS苹果手机版下载绿色版...
  10. python定义类object_Python之ClassObject用法详解