多行文字绘制方法:
1.使用StaticLayout绘制
@RequiresApi(Build.VERSION_CODES.M)
override fun onDraw(canvas: Canvas) {
/**
* obtain函数中入参(最低API 23)
* @param source 文本
* @param start 文本开始绘制起始索引
* @param end 文本结束绘制索引
* @param paint paint
* @param width 文本绘制的宽度
*/
val staticLayout1 =
StaticLayout.Builder.obtain(text, 0, text.length, textPaint, width).build()
staticLayout1.draw(canvas)
}
效果如下
可以看到,一行并没有占满,这个红色的框不是绘制的效果,是为了显示一行未绘制满行的效果,这是因为后一个文字不够在红色框框中显示完整,故此换了一行
2.paint.breakText配合canvas.drawText
private val fontMetrics = Paint.FontMetrics