当我们有了画板,还不行,还需要一支好画笔。
绘制图形相关
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // 抗锯齿,更加丝滑,哦不,平滑的画笔
重置画笔
paint.reset();
清除设置的属性。
设置抗锯齿
paint.setAntiAlias(true);
会损失一定的性能
设置线条相交的地方怎么补齐
paint.setStrokeJoin(Paint.Join.MITER);//锐角,延长线相交
paint.setStrokeJoin(Paint.Join.ROUND);//圆弧,平滑曲线连接
paint.setStrokeJoin(Paint.Join.BEVEL);//直线,简单连接顶点为一条直线
画笔比较粗的情况下,效果差异比较明显 设置线帽,即画笔底部的形状
paint.setStrokeCap(Paint.Cap.BUTT);//没有
paint.setStrokeCap(Paint.Cap.ROUND);//圆形
paint.setStrokeCap(Paint.Cap.SQUARE);//方形
设置画笔的宽度
paint.setStrokeWidth(50); //单位,px
设置画笔的样式
paint.setStyle(Paint.Style.FILL);//仅填充内容
paint.setStyle(Paint.Style.FILL_AND_STROKE);//填充内容并描边
paint.setStyle(Paint.Style.STROKE);//仅描边
设置透明度
paint.setAlpha(255);
设置画笔颜色
paint.setColor(Color.RED);
绘制文字相关
TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG); // 抗锯齿,更加丝滑,哦不,平滑的画笔
设置文字之间的间距
paint.setLetterSpacing(letterSpacing);
设置文字删除线
paint.setStrikeThruText(true);
设置文字下划线
paint.setUnderlineText(true);
设置文字大小
paint.setTextSize(textSize); //单位,px
与TextView不一样的是,TextView的setTextSize()方法单位是sp,这里需要注意
设置字体类型
paint.setTypeface(Typeface.BOLD);
Typeface.BOLD 加粗,Typeface.ITALIC 倾斜, 使用Typeface.create(familyName, style);加载自定义字体
设置文字倾斜
paint.setTextSkewX(-0.25f); //默认0,官方推荐的-0.25f是斜体
设置文字对齐方式
paint.setTextAlign(Align.LEFT);
paint.setTextAlign(Align.CENTER);
paint.setTextAlign(Align.RIGHT);
计算字符串所占的宽高
void getTextBounds(String text, int start, int end, Rect bounds);
以上为标准方法,text为要计算宽高的字符串,start表示从第几个位置开始截取,end表示截取到第几个位置之前。bounds你要事先创建好一个空的Rect,此方法一调用,Rect就有值了,然后可以通过rect.width()和rect.height()获取宽高。
-
仅计算字符串的宽度,简要计算文字宽度的方法
float measureText(String text); -
精确计算字符串中单个文字的宽度
int getTextWidths(String text, int start, int end, float[] widths);获取字符串中每个字符的宽度,并把结果填入参数 widths。事先创建好widths数组,此方法一调用,widths就会被赋值。
文字的基线
FontMetrics fontMetrics = paint.getFontMetrics();
- 公式1:基于基线顶点,指定左上角的顶点坐标,绘制文本
float baselineY = topY - fontMetrics.top;
- 公式2:基于基线中间,指定中间位置,绘制文本
float baselineY = centerY + (fontMetrics.bottom-fontMetrics.top)/2-fontMetrics.bottom
通过了公式计算后,使用这个baselineY的值传入参数y,这个就是校准基线后应该绘制的y坐标。