一. 前言

Paint,顾名思义,就是画,作动词画画,引申为画笔,所以paint就相当于我们平常使用的画笔,而对paint的一些setXXX操作就是日常对画笔粗细,颜色等的操作,但是程序中的paint可能会比生活中的更强大些。

二. 通常的使用方式

1. 构造方法

1
2
3
4
//无参构造方法
Paint mPaint = new Paint();

//有参的构造方法一般是设置一些值,我们使用一般情况使用set设置

2. 重置画笔

画笔的重置,在自定义控件时,前面设置了画笔的各个参数,如果后面还要用到画笔但要更改参数, 这时就不用重新new一个画笔,直接重置下就可以了。

1
mPaint.reset();

3. 设置画笔颜色

1
mPaint.setColor(Color.RED);

4. 设置画笔宽度

1
mPaint.setStrokeWidth(30);

5. 设置画笔的样式

1
2
3
4
//Paint.Style.FILL            //填充
//Paint.Style.STROKE //描边
//Paint.Style.FILL_AND_STROKE //描边加填充
mPaint.setStyle(Paint.Style.FILL);

6. 设置画笔的笔帽

笔帽,就是画笔画出来的线的两端的样式。

1
2
3
4
//Paint.Cap.BUTT    //没有样式
//Paint.Cap.ROUND //原型
//Paint.Cap.SQUARE //方形
mPaint.setStrokeCap(Paint.Cap.BUTT);

7.设置两线相交样式

1
2
3
4
//Paint.Join.MITER  //锐角
//Paint.Join.ROUND //圆角
//Paint.Join.BEVEL //直线
mPaint.setStrokeJoin(Paint.Join.MITER);

8. 设置抗锯齿

防锯齿,设置为true时,会损失一定的性能,使用时视情况而定。

1
mPaint.setAntiAlias(true);

9. 设置是否使用图像抖动处理

使用图像抖动处理。会使绘制的图片等颜色更加的清晰以及饱满,也是损失性能。

1
mPaint.setDither(true);

三. 绘制文本方面的使用方式

1. 字符行间距

1
2
3
4
5
//获取字符行间距
mPaint.getFontSpacing();

//设置字符行间距
mPaint.setLetterSpacing(12);

2. 字符间间距

1
2
3
4
5
//获取字符间间距
mPaint.getLetterSpacing();

//设置字符间间距
mPaint.setLetterSpacing();

3. 字符大小

1
mPaint.setTextSize(20);

4. 文本对齐方式

1
2
3
4
//Paint.Align.CENTER  //居中
//Paint.Align.LEFT //左对齐
//Paint.Align.RIGHT //右对齐
mPaint.setTextAlign(Paint.Align.CENTER);

后面的drawText会以图片的形式讲解。

5. 字体类型

1
2
3
4
5
6
//Typeface.DEFAULT       //默认样式
//Typeface.DEFAULT_BOLD //粗体
//Typeface.SANS_SERIF
//Typeface.SERIF
//Typeface.MONOSPACE
mPaint.setTypeface(Typeface.DEFAULT_BOLD);

除了系统提供的字体类型,我们也可以加载ttf文件,创建想要的类型。

参考文章:安卓开发引用ttf字体文件,其中assets文件夹需要自己创建,没有默认提供。

6. 文字倾斜

文字倾斜 默认0,官方推荐的-0.25f是斜体

1
mPaint.setTextSkewX(-0.25f);

7. 获取文本的矩形区域

1
void getTextBounds(String text, int start, int end, Rect bounds)

8. 获取文本的宽度

获取的是一个比较粗略的结果。

1
2
float measureText(String text)
float measureText(String text, int start, int end)

获取的是一个比较精确的结果。

1
2
3
4
5
6
int getTextWidths(String text, float[] widths)
int getTextWidths(String text, int start, int end, float[] widths)

float[] measuredWidth = new float[10];
//第二个参数是一个数组.传进去个长度跟字符串长度相同的float数组
int textWidths = mPaint.getTextWidths(str, measuredWidth);

参考文章

Paint.drawText()获取文字宽度

android高级自定义View之Paint高级使用(文字绘制)