Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解 (4)

Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

其实Canvas除了可以绘制图形之外,还可以绘制文字,Canvas的绘制文字的方法有drawText()、drawTextOnPath()、drawTextRun()等方法,在绘制文字是和Paint的结合更为紧密,所以讲绘制文字的方法放在下文和Paint一起讲可能效果会更好一些,好了,废话不多说了,接下来咱们就开始Paint的篇章。

Paint

为了更为清晰的讲解Paint的用法,先来新建一个自定义类,暂叫PaintStudyView,接下来创建一个它的大体骨架,在此类中定义了一些变量,变量的意义请见注释:

public class PaintStudyView extends View { private Paint mTextPaint; // 绘制文字的Paint private Paint mPointPaint; // 绘制参考点的Paint private Context mContext; private final static float Y_SPACE = 100; // y轴方向的间距 public PaintStudyView(Context context) { super(context); init(context); } public PaintStudyView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { mContext = context; mTextPaint = new Paint(); mTextPaint.setAntiAlias(true); // 消除锯齿 mTextPaint.setStrokeWidth(1); // 设置笔尖宽度 mTextPaint.setStyle(Paint.Style.FILL); // 填充 mTextPaint.setTextSize(30); mPointPaint = new Paint(); mPointPaint.setAntiAlias(true); mPointPaint.setStrokeWidth(5); mPointPaint.setColor(Color.RED); // 将参考点的Paint设置为红色 mPointPaint.setStyle(Paint.Style.STROKE);// 不填充 } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } } Canvas的绘制文字的相关方法: drawText()的重载方法

drawText() 是Canvas的绘制文字中的最长用的方法,它只能按照从左至右的普通方式来绘制文字。

drawText(String text, float x, float y, Paint paint)

text:待绘制的文字内容

x:文字绘制位置的x坐标

y:文字绘制位置的y坐标

paint:Paint画笔,可以通过Paint.setTextAlign()来决定文字的方位,有:Paint.Align.LEFT(居左),Paint.Align.RIGHT(居右),Paint.Align.CENTER(居中)三个位置。

drawText(String text, int start, int end, float x, float y, Paint paint)

start:代表从text中的第几个字符开始截取绘制,包含第start个字符。

end:代表截取到text的第几个字符,不包含第end个字符。

例如:我是一个自定义View的控件,start=1,end=6,截取后为:是一个自定

下面两个重载方法可以参考第二个很容易就能理解:

drawText(CharSequence text, int start, int end, float x, float y, Paint paint)

drawText(char[] text, int index, int count, float x, float y, Paint paint)

以下示例说明了文字的不同位置,同时也说明了第二个和第四个重载方法对字符串截取时的用法:

String str = "我是一个自定义View的控件";// 待绘制文字 float x = getWidth() / 2; float y = 100; canvas.drawPoint(x, y, mPointPaint); // 绘制参考点,便于观察文字处于x,y坐标的位置,从而来学习setTextAlign()方法 mTextPaint.setTextAlign(Paint.Align.LEFT); canvas.drawText(str, x, y, mTextPaint); y += Y_SPACE; canvas.drawPoint(x, y, mPointPaint); mTextPaint.setTextAlign(Paint.Align.RIGHT); canvas.drawText(str, 0, 6, x, y, mTextPaint); y += Y_SPACE; canvas.drawPoint(x, y, mPointPaint); mTextPaint.setTextAlign(Paint.Align.CENTER); canvas.drawText(str.toCharArray(), 1, 6, x, y, mTextPaint);

效果图如下:

Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

其中的红点为额外添加的参考坐标,目的是为了突出setTextAlign中参数的位置。

drawTextOnPath()的重载方法

drawTextOnPath() 由方法名字我们就可以看出来他可以按照Path的走向来绘制文字,例如我们在path中传入一个圆弧,那么绘制出来的文字走向就是圆弧状的,是不是很酷,来看一下它的重载方法:

drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)

text:同drawText的第一个参数。

path:Path参数,用法在前文已经说过了。

hOffset:水平方向的偏移量。

vOffset:垂直方向的偏移量。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwygzd.html