贝塞尔曲线一般用在绘制canvas图层上,这里主要通过ObjectAnimation动画及估值器实现将贝塞尔曲线作为控件移动的动画路径。
项目demo图:
一、ObjectAnimator动画原理
ObjectAnimator.ofObject(….,”xxx”,估值值,区间数组); 【定义动画属性xxx和区间】
插值器/加速器(Interpolator)【返回当前数字进度t】
估值值(Evaluator)【根当前数字进度计算并返回当前值】
调用setXxx函数 【根据封装好的setXxx函数并反射调用,将第三步返回当前值以参数传入】
二、自定义ObjectAnimator属性
上面我们理解了ObjectAnimator的动画实现原理,下面我们来自定义一个属性动画来看看实现贝塞尔路径效果吧。
一、保存贝塞尔路径的信息——ViewPoint
为了保存贝塞尔路径的一些关键点信息,我们定义一个类来保存:
public class ViewPoint{
float x ,y;
float x1,y1;
float x2,y2;
int operation;
public ViewPoint(float x, float y) {
this.x = x;
this.y = y;
}
// 设置起点
public static ViewPoint moveTo(float x, float y, int operation){
return new ViewPoint(x,y,operation);
}
// 直线移动
public static ViewPoint lineTo(float x, float y, int operation){
return new ViewPoint(x,y,operation);
}
// 三阶贝塞尔曲线移动
public static ViewPoint curveTo(float x, float y,float x1,float y1,float x2,float y2, int operation){
return new ViewPoint(x,y,x1,y1,x2,y2,operation);
}
// 二阶贝塞尔曲线移动
public static ViewPoint quadTo(float x, float y,float x1,float y1, int operation){
return new ViewPoint(x,y,x1,y1,operation);
}
p