PathMeasure
构造方法
PathMeasure();
PathMeasure(Path path, boolean forceClosed);
常用API
setPath(Path path, boolean forceClosed);
getLength();
isClosed();
nextContour();
getMatrix(float distance, Matrix matrix, int flags);
getPosTan(float distance, float[] pos, float[] tan);
getSegment(float startD, float stopD, Path dst, boolean startWithMoveTo);
案例
private Path trackPath = new Path();
private Path dstPath = new Path();
private Paint paint;
private PathMeasure mPathMeasure;
private float fraction;
@Override
protected void onDraw(Canvas canvas) {
trackPath.reset();
dstPath.reset();
trackPath.addCircle(centerX, centerY, 100, Path.Direction.CCW);
mPathMeasure.setPath(trackPath, false);
mPathMeasure.getSegment(0, mPathMeasure.getLength() * fraction, dstPath, false);
canvas.drawPath(dstPath, paint);
}
public void goPathAnim(long duration) {
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
valueAnimator.setDuration(duration);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
fraction = (Float) animation.getAnimatedValue();
postInvalidate();
});
valueAnimator.start();
}