Android新优化

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)
    }
上一篇下一篇

猜你喜欢

热点阅读