Android绘制文字的基本套路
2020-10-03 本文已影响0人
liberty_7658
绘制文字使用的api:
参数含义:
x 文字绘制的起始点
y 基线public void drawText(@NonNull String text, float x, float y, >@NonNull Paint paint) { super.drawText(text, x, y, paint); }
基线的含义:
image.png
只有基线计算正确了我们才能绘制出一个正常的view。
现在来计算下这个baseline的值:
var paintText = Paint().apply {
color = Color.WHITE
isAntiAlias = true
}
//在onDraw方法里面打印输出下paint.fontMetricsInt的值来观察下上面那张图的值
overide fun onDraw(canvas:Canvas){
Log.i("Zjc",paintText.fontMetricsInt.toString())
//打印结果Zjc: FontMetricsInt: top=-48 ascent=-42 descent=11 bottom=13 leading=0
因此也知道如何计算baseline的值了 = (paintText.fontMetricsInt.bottom - paintText.fontMetricsInt.top) / 2 - paintText.fontMetricsInt.bottom
}
现在就可以进行绘制了,如下:
//绘制文字内容
var paintText = Paint().apply {
color = Color.WHITE
isAntiAlias = true
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
//绘制文字内容
drawTextContent(canvas)
}
private fun drawTextContent(canvas: Canvas) {
var rectText = Rect()
paintText.getTextBounds(inTextContent,0,inTextContent.length,rectText)
var dx = parentWidth/2 - rectText.width()/2
var dy = (paintText.fontMetricsInt.bottom - paintText.fontMetricsInt.top) / 2 - paintText.fontMetricsInt.bottom
var baseLine = parentWidth / 2 + dy
canvas?.drawText(inTextContent, dx.toFloat(), baseLine.toFloat(), paintText)
}