Android属性动画(二):深入valueAnimator和objecAnimator
来源:互联网 发布:乌鲁木齐有4g网络吗 编辑:程序博客网 时间:2024/05/22 00:21
ValueAnimator的高级用法
无论是valueAnimator还是objectAnimator都离不开TypeEvaluator的使用,那TypeEvaluator是用来干嘛的?
TypeEvaluator是用来告知动画系统如何从开始值过渡到结束值,例如上一篇文章中使用的valueAnimator的offInt()的实现,其实就是内
置了一个TypeEvaluator来实现的。
接下来我们用一个实例来学习ValueAnimator的高级用法,该实例实现一个圆点Point从屏幕左上角移到右下角。
1.首先创建实体类Point
public class Point {private float x;private float y;public Point(float x, float y){this.x = x;this.y = y;}public float getX() {return x;}public float getY() {return y;}}
2.创建一个MyEvaluator去实现TypeEvaluator接口
public class PointEvaluator implements TypeEvaluator {@Overridepublic Object evaluate(float fraction, Object startValue, Object endValue) {Point startPoint = (Point) startValue;Point endPoint = (Point) endValue;float x = startPoint.getX() + fraction * (endPoint.getX() - startPoint.getX());float y = startPoint.getY() + fraction * (endPoint.getY() - startPoint.getY());Point point = new Point(x, y);return point;}}
这里的fraction很重要,它告知了我们当前动画的完成度
3.然后我们自定义一个view
public class MyView extends View {private static final float RADIUS = 50f;private Paint paint;private Point currentPoint;//换成一参数构造方法就不能运行了public MyView(Context context, AttributeSet attrs) {super(context, attrs);paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.BLUE);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if(currentPoint == null){currentPoint = new Point(RADIUS, RADIUS);drawCircle(canvas);startAnimation();}else{drawCircle(canvas);}}public void drawCircle(Canvas canvas){float x = currentPoint.getX();float y = currentPoint.getY();canvas.drawCircle(x, y, RADIUS, paint);}public void startAnimation(){Point startPoint = new Point(RADIUS, RADIUS);Point endPoint = new Point(getWidth() - RADIUS, getHeight() - RADIUS);ValueAnimator anim = ValueAnimator.ofObject(new PointEvaluator(), startPoint, endPoint);anim.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {currentPoint = (Point) animation.getAnimatedValue();invalidate();//刷新view视图,触发onDraw的调用}});anim.setDuration(5000);anim.start();}}首先在构造方法里实例化了一个画笔Paint,并设置了Piant的属性。Paint.ANTI_ALIAS_FLAG是使位图抗锯齿的标志,并把画笔颜色
设置为蓝色。drawCicle()方法中用Canvas的drawCircle()画出了一个圆。接着实现了view的onDraw()方法,并在onDraw()中去绘制。
startAnimation()用于播放动画,ValueAnimator的ofObject()中,首先传入Evaluator的实例,然后后面的参数告知如何变化。其中在监
听器中添加invalidate()方法,使得每一次动画发生了变化,就刷新视图,因此会触发onDraw()的调用,重新绘制视图
二:ObjectAnimator的高级用法
可以结合上面实例,在动画播放中,改变Point的颜色
0 0
- Android属性动画(二):深入valueAnimator和objecAnimator
- 属性动画二--ValueAnimator
- android 属性动画(ValueAnimator)
- Android属性动画 ValueAnimator
- Android 动画 ValueAnimator(二)
- android 动画 属性动画 ValueAnimator
- Android 动画之属性动画ValueAnimator和ObjectAnimator
- Android属性动画完全解析(二)-ValueAnimator和ObjectAnimator的高级用法
- Android属性动画完全解析(二):ValueAnimator和ObjectAnimator的高级用法
- Android 属性动画(二):ObjectAnimator与ValueAnimator
- Android 属性动画详解 二、ValueAnimator与插值器
- Android属性动画(二)——ValueAnimator
- Android属性动画之ValueAnimator
- Android属性动画之ValueAnimator
- 属性动画ValueAnimator和ObjectAnimator
- android属性动画 —— ValueAnimator和ObjectAnimator的例子
- Android 属性动画ValueAnimator和ObjectAnimator的高级用法
- Android属性动画,ValueAnimator和ObjectAnimator的高级用法
- 46-内存的申请与销毁
- popupwindow的使用及注意事项
- 如何使用 Xcode Targets 管理开发和生产版本?iOS宏的使用
- SparkStreaming体会:1.提纲
- Core Graphics框架学习之在图片上绘制文字
- Android属性动画(二):深入valueAnimator和objecAnimator
- javascript入门经典【推荐】—新手必备、零基础学习
- NodeJS学习二CommonJS规范
- 数字图象处理——滤波器(1)
- C++ STL -- stack / queue / priority_queue 的使用方法
- php大文件上传时,应该注意的问题
- 2013年山东省第四届ACM大学生程序设计竞赛 Problem A Rescue The Princess 向量法 水题
- Problem L
- 如何让用户觉得你的 app 加载速度很快