最近产品要求在一个二阶贝塞尔曲线轨迹上运动一个小球,这个小球的运动速度是按照三阶贝塞尔曲线变化的,复杂的思考过程和调研百度过程就不说啦;
- 首先Path可以绘制出二阶贝塞尔和三阶贝塞尔;quadTo函数和cubicTo函数;
- 然后运动轨迹使用PathMeasure需要知道运动的长度;动画运行时间我们知道,长度由时间决定,所以先计算长度;
- 计算长度需要提供一个差值器,输入时间得到长度,已知时间为0,长度为0,时间为1长度为1,那么时间和长度的规律按照三阶贝塞尔变化则可按照如下网站挑选一个合适的为准:cubic-bezier.com
- 数值调整好之后,安卓对于这种有限规则x求y的变化提供了PathInterpolator(支持5.0以上)或者所有版本都支持的androidx库的PathInterpolatorCompat;封装已知公式所对应的path即可;
综上所述,我们使用三阶贝塞尔得到的y(长度),在带入二阶PathMeasure中,使用getPosTan函数得到具体坐标点即可;