android提供的Path类,他可以预先在View上连成路径,然后调用Canvas的drawPath(path,paint),沿着路径画出来即可;
【1】画三角形
// path.moveTo(100, 100);
// path.lineTo(0, 200);
// path.lineTo(200, 200);
// path.close();//连接首尾
// canvas.drawPath(path, paint);
// canvas.drawTextOnPath(我沿着这条线走, path, 0, 0, paint);
【画贝塞尔曲线】
//贝塞尔曲线
// path.moveTo(100,100);
// path.quadTo(100, 400, 300, 300);//两个点:控制点;结束点
// canvas.drawPath(path, paint);
//canvas.drawPoint(100, 100, paintPoint);
//canvas.drawPoint(100,400,paintPoint);
//canvas.drawPoint(300,300,paintPoint);
【仿水边波动效果】
public class MyPathView extends View {
private Paint paint;
private Path path;
private Paint paintPoint;
private int width;
private int height;
private int count = 0;
private int size = 0;
private boolean isAdd=true;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0x23:
count+=5;
if(count>=80){
count=0;
}
if (isAdd){
size++;
if(size>10){
isAdd = false;
}
}else{
size--;
if(size<=-10){
isAdd =true;
}
}
invalidate();
sendEmptyMessageDelayed(0x23,100);
break;
}
}
};
public MyPathView(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(30);
paint.setStyle(Paint.Style.STROKE);
paintPoint = new Paint();
paintPoint.setStrokeWidth(10);
paintPoint.setColor(Color.GREEN);
paintPoint.setStyle(Paint.Style.FILL);
path = new Path();
handler.sendEmptyMessageDelayed(0x23, 1000);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
path.reset();
path.moveTo(count, 100);
for (int i = 0; i < 10; i++) {
path.rQuadTo(20, 20, 40, 0);
path.rQuadTo(20, -20, 40, 0);
}
canvas.drawPath(path, paint);
canvas.drawRect(200, 0, 400, 200, paint);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
setMeasuredDimension(width, height);
}
}
布局