Android动画----ValueAnimator
来源:互联网 发布:php多文件上传代码 编辑:程序博客网 时间:2024/06/07 06:28
引言
关于Android动画的内容,我们已经讲了好几篇了,都是一些最基础的,包括Alpha、Translate、Rotate、Scale都是常见的补间动画(Tween Animation),属于视图动画(包括补间动画和帧动画),今天我们来学习另一种类型,属性动画,主角是ValueAnimator。
那么肯定有人会疑惑视图动画和属性动画有什么区别?那就看下面我对这两种动画的理解:
- 视图动画:只改变控件的显示效果以及显示位置,不改变控件本身的属性。
- 属性动画:改变控件的某一属性,从而实现控件的展示的动画效果。
ValueAnimator
ValueAnimator也是继承自Animator类,它本质是提供了一个时间的引擎去提供一系列变化的值并将其值赋值与目标控件上。
ValueAnimator xml实现方式
这里是一个简单的使用xml来实现ValueAnimator的方式
第一步,在res文件下新建animator文件夹,并在animator文件夹下新建valueanimator.xml文件,目录结构如下图所示:
第二步,编写valueanimator.xml文件内容:如下
<?xml version="1.0" encoding="utf-8"?><animator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="10000" android:valueFrom="0" android:valueTo="100" android:valueType="intType" android:repeatCount="0" android:interpolator="@android:anim/linear_interpolator" android:repeatMode="reverse"/>
第三步,实例化valueanimator
private ValueAnimator valueAnimator; //声明动画对象……valueAnimator = (ValueAnimator)AnimatorInflater.loadAnimator(this,R.animator.valueanimator); //实例化/*AnimatorInflator 是Andorid 提供的属性动画帮助类*/
第四部,添加动画监听
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int value = (Integer)valueAnimator.getAnimatedValue(); //获取动画的值 mTVValue.setText(value+""); //把值设为控制的值,nTVValue是一个TextView } });
第五步,开始动画
valueAnimator.start();
ValueAnimator 代码实现方式
第一步,声明对象,并实例化
private ValueAnimator valueAnimator;……valueAnimator = new ValueAnimator();
第二步,设置相关参数
valueAnimator.setIntValues(0,100);valueAnimator.setDuration(10000);valueAnimator.setInterpolator(new LinearInterpolator());
第三步,添加动画监听
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int value = (Integer)valueAnimator.getAnimatedValue(); mTVValue.setText(value+""); } });
第四步,执行动画
valueAnimator.start();
动画效果
先简单的看一下动画效果
这算是最简单基础的ValueAnimator的用法。使用流程基本如此,其它也基本是在这个流程上做扩充,在使用的过程中可以自行了解一下。
ValueAnimator中常用函数说明
void addUpdateListener(ValueAnimator.AnimatorUpdateListener listener) //动画值监听函数void cancel() //取消动画void end() //结束动画static ValueAnimator ofArgb(int... values)//颜色动画构造函数static ValueAnimator ofFloat(float... values)//浮点动画构造函数static ValueAnimator ofInt(int... values) //整型动画构造函数static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values) //对象动画构造函数static ValueAnimator ofPropertyValuesHolder(PropertyValuesHolder... values) //不知道怎么翻译void setEvaluator(TypeEvaluator value) //设置值计算器void setInterpolator(TimeInterpolator value) //设置插值器void pause()//暂停动画void resume() //恢复动画//
颜色动画示例
示例代码:
xml
<?xml version="1.0" encoding="utf-8"?><animator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="10000" android:valueFrom="#ffff0000" android:valueTo="#ffffffff" android:valueType="colorType" />
监听器
colorValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { int color = (Integer)valueAnimator.getAnimatedValue(); mTVValue.setBackgroundColor(color); } });
效果
对象动画示例
Javacode
/*代码实现对象动画*/ objectValueAnimator = ValueAnimator.ofObject(new MyAnimObjectEvaluator(),new MyAnimObject(0),new MyAnimObject(10)); objectValueAnimator.setDuration(10000); objectValueAnimator.setInterpolator(new LinearInterpolator());
/*对象动画*/ class MyAnimObject{ int value; public MyAnimObject(int value){ this.value = value; } }
/*对象动画算值器*/ class MyAnimObjectEvaluator implements TypeEvaluator<MyAnimObject>{ @Override public MyAnimObject evaluate(float v, MyAnimObject myAnimObject, MyAnimObject t1) { int oldValue = myAnimObject.value; int newValue = t1.value; int res = (int)((oldValue + newValue)*v)*2; //返回偶数 MyAnimObject animObject = new MyAnimObject(res); return animObject; } }
监听器
objectValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { MyAnimObject value = (MyAnimObject)valueAnimator.getAnimatedValue(); mTVValue.setText(value.value); } });
效果:
结尾
关于ValueAnimator的基础学习,这篇博客就先到这里,关于本篇博客用到动画值计算器以及插值器,会在下篇博客进行专门讲解。
3 1
- android 属性动画(ValueAnimator)
- Android 动画 ValueAnimator(一)
- Android 动画 ValueAnimator(二)
- Android 动画 ValueAnimator(三)
- Android 动画 ValueAnimator(四)
- Android动画----ValueAnimator
- Android属性动画 ValueAnimator
- android 动画 属性动画 ValueAnimator
- Android属性动画之ValueAnimator
- Android属性动画之ValueAnimator
- Android 动画之属性动画ValueAnimator
- Android 2.x自定义属性动画ValueAnimator
- Android属性动画完全解析 ValueAnimator
- Android-Animator属性动画( ObjectAnimator , AnimatorSet , ValueAnimator )
- Android值动画二(ValueAnimator)
- android属性动画相关类学习---ValueAnimator
- Android属性动画(ObjectAnimator、PropertyValuesHolder、ValueAnimator、AnimatorSet)
- Android属性动画ValueAnimator源码简单分析
- ubuntu make install node JS
- ROS教程 - 多台计算机 网络 设置
- HTML5-Web-存储
- 线程安全单例模式示例
- ubuntu/wireshark下Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:45
- Android动画----ValueAnimator
- Spring Boot 配置文件介绍
- delete 类数组指针时可能出现的问题
- 我常用mysql命令
- 1013. Battle Over Cities (25)
- Linux内核内存池管理技术实现分析
- 这里主要收集各种用到的库,会不定期更新
- 02-net-surgery.ipynb
- 断言调试