1.初步绘制文字g
class CustomerTextCenter(context: Context?, attrs: AttributeSet? = null) : View(context, attrs) {
var textHeight = 0
val text = "g"
var textPaint = TextPaint()
init {
textPaint.apply {
textSize = 80f
color = Color.BLACK
}
}
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
textHeight = h
}
override fun onDraw(canvas: Canvas?) {
var textDrawX = width / 2 * 1.0f
var textDrawY = textHeight * 1.0f
canvas?.drawText(text, textDrawX, textDrawY, textPaint)
}
}
(坐标图)
(效果图1)
2.文字左右居中
init {
textPaint.apply {
textSize = 80f
color = Color.BLACK
//居中
textAlign = Paint.Align.CENTER
}
}
这一步是设置文本居中,但是看到只有左右居中了
(效果图2)
3.计算出baseline上下居中
var textBaseline = 0f
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
viewHeight = h
val fontMetrics = textPaint.fontMetrics
//获取文字的高度
var textHeight = fontMetrics.descent - fontMetrics.ascent
//计算baseline
textBaseline = viewHeight / 2 + (textHeight / 2 - fontMetrics.descent)
}
override fun onDraw(canvas: Canvas?) {
val textDrawX = width / 2 * 1.0f
val textDrawY = textBaseline
canvas?.drawText(text, textDrawX, textDrawY, textPaint)
}
(效果图3)