动画[3]PropertyAnimator ValueAnimator
来源:互联网 发布:非农数据从哪里看 编辑:程序博客网 时间:2024/06/03 13:15
【参考链接】
ValueAnimator本身并不作用于任何对象,他可以对值做动画,然后我们可以监听动画过程,在动画过程中使用计算出的值来修改对象的属性
of()
addUpdateListener()
通过of()来指定估值器和起始值终止值(相当于setEvaluator()+setValues()),通过addUpdateListener()来监听动画过程。
ValueAnimator支持的值的类型有
相比于TweenAnimation,PropertyAnimator内部除了插值器Interpolator,还有估值器Evaluator。
系统提供的估值器有IntEvaluator、FloatEvaluator、ArgbEvaluator, 上面的of()就相当于在使用这些估值器。
Evaluator提供了evaluate()方法,用于根据当前数据变化的百分比,来计算改变后的数据。以IntEvaluator为例,其evaluate()方法实现为
属性动画相当于是先通过插值器计算出数据变化的百分比,然后再通过估值器计算出改变后的数据。
以ofInt()为例(需要API 11及以上)
//起始值和终止值是0~100
ValueAnimatorvalueAnimator = ValueAnimator.ofInt(0,100);
valueAnimator.addUpdateListener(
newValueAnimator.AnimatorUpdateListener() {
@Override
public voidonAnimationUpdate(ValueAnimator animator) {
//通过getAnimatedValue()来获取计算出的值
//因为上面是ofInt,所以这里可以强转为Integer
IntegeranimatedValue = (Integer) animator.getAnimatedValue();
((TextView)view).setText("$ " + animatedValue);
}
});
valueAnimator.setDuration(3000);
valueAnimator.start();
其同等实现为
ValueAnimatorvalueAnimator = ValueAnimator.ofInt(0,100);
valueAnimator.addUpdateListener(
newValueAnimator.AnimatorUpdateListener() {
privateIntEvaluatormEvaluator=newIntEvaluator();
@Override
public voidonAnimationUpdate(ValueAnimator animator) {
//先得到插值器返回的数据变化的百分比
floatanimatedFraction =animator.getAnimatedFraction();
//使用估值器,通过上面的 数据变化的百分比,得到改变后的数据
Integer evaluate =mEvaluator.evaluate(animatedFraction,0,100);
((TextView)view).setText("$ " + evaluate);
}
});
valueAnimator.setDuration(3000);
valueAnimator.start();
以ofArgb()为例(需要API 21及以上)
//Argb传递的值也是int
ValueAnimatorvalueAnimator = ValueAnimator.ofArgb(/*RED*/0xFFFF8080,/*BLUE*/0xFF8080FF);
valueAnimator.addUpdateListener(
newValueAnimator.AnimatorUpdateListener() {
@Override
public voidonAnimationUpdate(ValueAnimator animator) {
intanimatedValue = (int) animator.getAnimatedValue();
view.setBackgroundColor(animatedValue);
}
});
valueAnimator.setDuration(3000);
valueAnimator.start();
其同等实现为
ValueAnimatorvalueAnimator = ValueAnimator.ofArgb(/*RED*/0xFFFF8080,/*BLUE*/0xFF8080FF);
valueAnimator.addUpdateListener(
newValueAnimator.AnimatorUpdateListener() {
privateArgbEvaluatormEvaluator=newArgbEvaluator();
@Override
public voidonAnimationUpdate(ValueAnimator animator) {
floatanimatedFraction =animator.getAnimatedFraction();
Object evaluate =mEvaluator.evaluate(animatedFraction,/*RED*/0xFFFF8080,/*BLUE*/0xFF8080FF);
view.setBackgroundColor((int)evaluate);
}
});
valueAnimator.setDuration(3000);
valueAnimator.start();
既然上面还有ofObject(),所以我们还可以创建自己的估值器
先定义如下一个实体类
public classPoint {
private floatx;
private float y;
public Point(floatx, floaty) {
this.x= x;
this.y= y;
}
public floatgetX() {
returnx;
}
public voidsetX(floatx) {
this.x= x;
}
public floatgetY() {
returny;
}
public voidsetY(floaty) {
this.y= y;
}
@Override
publicStringtoString() {
return"("+x+", "+y+")";
}
}
其相应的Evaluator为
public classPointEvaluatorimplementsTypeEvaluator<Point> {
@Override
publicPointevaluate(floatfraction,Point startPoint,Point endPoint) {
floatx = startPoint.getX() + fraction *(endPoint.getX() - startPoint.getX());
float y =startPoint.getY() + fraction * (endPoint.getY() - startPoint.getY());
Point point =newPoint(x,y);
return point;
}
}
通过如下方式使用
ValueAnimatorvalueAnimator=ValueAnimator.ofObject(newPointEvaluator(), newPoint(0,0), new Point(100,200));
valueAnimator.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {
@Override
public voidonAnimationUpdate(ValueAnimator animation) {
Point point = (Point) animation.getAnimatedValue();
((TextView)view).setText(point.toString());
}
});
valueAnimator.setDuration(3000);
valueAnimator.start();
setRepeatCount()
setRepeatMode()
setInterpolator()
setStartDelay()
setDuration()
还可以设置如下属性,功能都跟TweenAnimation差不多
valueAnimator.setRepeatCount(3);
valueAnimator.setRepeatMode(ValueAnimator.RESTART);
valueAnimator.setInterpolator(newLinearInterpolator());
valueAnimator.setStartDelay(1000);//仅第一次有效,重复的时候不起作用
valueAnimator.setDuration(3000);
valueAnimator.start();
xml
上面的int效果其实也可以通过xml文件来定义。不过还是需要自己监听。
在res/animator目录下建立如下资源文件
<?xml version="1.0"encoding="utf-8"?>
<animator xmlns:android="http://schemas.android.com/apk/res/android"
android:valueType="intType"
android:valueFrom="0"
android:valueTo="100"
android:repeatCount="1"
android:repeatMode="restart"
android:startOffset="1000"
android:duration="3000">
</animator>
通过如下方式来使用
ValueAnimator valueAnimator= (ValueAnimator) AnimatorInflater.loadAnimator(this,R.animator.anim_test);
valueAnimator.addUpdateListener(
newValueAnimator.AnimatorUpdateListener() {
@Override
public voidonAnimationUpdate(ValueAnimator animator) {
intanimatedValue = (int) animator.getAnimatedValue();
((TextView)view).setText("$ " + animatedValue);
}
});
valueAnimator.start();
listener
除了上面可以添加AnimatorUpdateListener,还可以添加AnimatorListener
valueAnimator.addListener(newAnimator.AnimatorListener() {
@Override
public voidonAnimationStart(Animator animation) {
}
@Override
public voidonAnimationEnd(Animator animation) {
}
@Override
public voidonAnimationCancel(Animator animation) {
}
@Override
public voidonAnimationRepeat(Animator animation) {
}
});
- 动画[3]PropertyAnimator ValueAnimator
- PropertyAnimator学习之ValueAnimator
- 动画[4]PropertyAnimator ObjectAnimator
- 动画[5]PropertyAnimator AnimatorSet
- 动画[6]PropertyAnimator LayoutTransition
- 使用ValueAnimator设置动画
- android 属性动画(ValueAnimator)
- Andoird ValueAnimator 实现动画
- ValueAnimator构造好玩动画
- 属性动画之ValueAnimator
- Android 动画 ValueAnimator(一)
- Android 动画 ValueAnimator(二)
- Android 动画 ValueAnimator(三)
- Android 动画 ValueAnimator(四)
- 属性动画之ValueAnimator
- ValueAnimator实现动画【抛物线】
- Android动画----ValueAnimator
- 属性动画二--ValueAnimator
- WebView addJavaScriptInterface接口中的隐患解决办法
- pagefile文件大小设置
- 数组去重
- 数据库的增删改查及创建
- Nginx下配置网站SSL实现https访问本站就是用的这方法
- 动画[3]PropertyAnimator ValueAnimator
- MongoDB特点及功能介绍
- 论文记录-Pruning Filters For Efficient ConvNets
- linux RTC 驱动模型分析
- Kotlin 第十一章:扩展
- Linux(Centos)之安装Nginx及注意事项 阅读目录 1.Nginx的简单说明 2.准备工作 3.安装SSL功能需要openssl库以及gzip模块需要的zlib库 4.安装 rewri
- Mysql中剔除重复字段并按主键降序排序后找出主键值最大的数据
- POJ 1006 Chinese Remainder Theory
- Qt如何执行bash命令,并获取返回结果