首先要注意。
自定控件的PaintView要继承自View,所画的内容才会正常显示出来。如果继承ViewGroup默认是不调用onDraw()方法的。
1 构造Paint
private Paint mPaint;
public PaintView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
}
2 画圆
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.reset(); //重置
mPaint.setColor(Color.RED); //设置画笔颜色
mPaint.setAlpha(255); //设置透明度 0-255
float centerx = getWidth()/2; //中心点x坐标
float centerY = getHeight()/2;//中心点y坐标
canvas.drawCircle(centerx, centerY, 100, mPaint);
}
3 设置画笔填充样式
mPaint.setStyle(Paint.Style.STROKE);//描边
其他两种样式
填充并描边
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
填充
mPaint.setStyle(Paint.Style.FILL);
4 设置画笔宽度
mPaint.setStrokeWidth(20); //画笔的宽度
5 path
Path path = new Path();
path.moveTo(100, 100);
path.lineTo(300, 100);
path.lineTo(300, 300);
path.lineTo(100,300);
mPaint.setStrokeJoin(Paint.Join.MITER); //拐角形状 直线
canvas.drawPath(path, mPaint);
6 拐角形状
mPaint.setStrokeJoin(Paint.Join.ROUND);//拐角形状 圆弧
mPaint.setStrokeJoin(Paint.Join.BEVEL); //锐角
看下图 更易懂
6 线帽
mPaint.setStrokeCap(Paint.Cap.ROUND); //圆帽
mPaint.setStrokeCap(Paint.Cap.SQUARE); //平帽
mPaint.setStrokeCap(Paint.Cap.BUTT);//没有帽
看下图更易懂
文字绘制
1 字符间距
float letterSpace = 2.0f;
mPaint.setLetterSpacing(letterSpace); //设置字符间距
canvas.drawText("德玛西亚必胜!", centerx-100, centerY, mPaint);
Log.i("PaintView", "字符间距" + mPaint.getLetterSpacing());
打印结果:
com.yeliang.app03_paint I/PaintView: 字符间距2.0
2 字体相关
mPaint.setTextSize(20); //设置文字大小
mPaint.setTypeface(Typeface.DEFAULT_BOLD); //粗体
mPaint.setTextSkewX(-0.25f); //倾斜度