绘制跟随路径移动的圆圈
public void onDraw(Canvas canvas){
Path sPath = new Path();
sPath.moveTo(100, 100);
sPath.lineTo(300, 100);
sPath.lineTo(300, 300);
sPath.lineTo(100,300);
sPath.lineTo(100,100);
sPath.close();
Paint ballPaint = new Paint();
ballPaint.setColor(Color.GREEN);
Paint pathPaint = new Paint();
pathPaint.setColor(Color.BLUE);
canvas.drawPath(sPath, ballPaint);
canvas.drawCircle(100,100,20,pathPaint);
}
测量路径,获取坐标
int iCurStep = 0;// current animation step
@Override
protected void onDraw(Canvas canvas) {
PathMeasure pm = new PathMeasure(sPath, false);
float fSegmentLen = pm.getLength() / 20;//we'll get 20 points from path to animate the circle
float afP[] = {0f, 0f};
if (iCurStep <= 20) {
pm.getPosTan(fSegmentLen * iCurStep, afP, null);
canvas.drawCircle(afP[0],afP[1],20,pathPaint);
iCurStep++;
// invalidate();
} else {
iCurStep = 0;
};
};
贝塞尔曲线
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE); // 填充模式 - 描边
paint.setStrokeWidth(5);
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
Path path = new Path();
path.moveTo(100, 100);
path.quadTo(500, 0, 1000, 1000);
path.quadTo(300, 500, 0, 2000);
// path.cubicTo(200, 200, 0, 0, 1000, 1000);
canvas.drawPath(path, paint);