其实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);效果图如下:
其中的红点为额外添加的参考坐标,目的是为了突出setTextAlign中参数的位置。
drawTextOnPath()的重载方法drawTextOnPath() 由方法名字我们就可以看出来他可以按照Path的走向来绘制文字,例如我们在path中传入一个圆弧,那么绘制出来的文字走向就是圆弧状的,是不是很酷,来看一下它的重载方法:
drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
text:同drawText的第一个参数。
path:Path参数,用法在前文已经说过了。
hOffset:水平方向的偏移量。
vOffset:垂直方向的偏移量。