Cap枚举
Cap指定了线段和路径的开始和结束的描边处理方式,共三种处理方式 ,默认处理方式是BUTT。
如下:
- BUTT 貌似与SQUARE一样
- ROUND 线段的开始和结束的是圆形的
- SQUARE 线段的开始和结束的是方形的
看图说话,如下图所示
看圈住的部分,线段结尾显示不一样 红线为BUTT 绿线为ROUND 蓝线为SQUARE
Join枚举
Join指定了线段和曲线段连接处的描边处理方式,共三种处理方式,默认处理方式是MITER。
如下:
- MITER 连接处显示为直角
- ROUND 连接处显示为圆角
- BRVEL 连接处显示为斜角(感觉被切了一刀)
看图说话,如下图所示
看圈住的部分,每个拐角处显示不一样 红线为MITER 绿线为ROUND 蓝线为BRVEL
注意上面所说的都是描边处理,只有在Paint的setStyle为Paint.Style.STROKE
和Paint.Style.FILL_AND_STROKE
下起作用
示例代码如下:
package com.github.xiaohu409.pathdemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
/**
* 文件名:PathView
* 描述:
* 作者: hutao
* 日期: 2019/3/21
* 版本: v1.0
*/
public class PathView extends View {
private Paint paint;
private Path path;
public PathView(Context context) {
this(context, null);
}
public PathView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PathView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
//创建画笔
paint = new Paint();
//设置画笔的填充样式
paint.setStyle(Paint.Style.STROKE);
//描边的宽度
paint.setStrokeWidth(14);
//创建路径
path = new Path();
//设置路径的起始位置
path.moveTo(10, 10);
for (int i = 0; i <= 40; i++) {
//生成路径
path.lineTo(i * 25, (float) Math.random() * 100);
}
paint.setTextSize(100);
paint.setTextAlign(Paint.Align.RIGHT);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//指定画笔的开始结束描边处理
paint.setStrokeCap(Paint.Cap.BUTT);
//指定画笔的连接处的描边处理
paint.setStrokeJoin(Paint.Join.MITER);
//指定画笔的颜色
paint.setColor(Color.RED);
//画指定路径
canvas.drawPath(path, paint);
//设置画板的位移距离
canvas.translate(0, 60);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setColor(Color.GREEN);
canvas.drawPath(path, paint);
canvas.translate(0, 60);
paint.setStrokeCap(Paint.Cap.SQUARE);
paint.setStrokeJoin(Paint.Join.BEVEL);
paint.setColor(Color.BLUE);
canvas.drawPath(path, paint);
canvas.translate(0, 60);
canvas.drawTextOnPath("huao", path, 120, 120, paint);
}
}