关于TextView文字基线问题

package com.example.vitomvp.ui;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import androidx.annotation.Nullable;

/**
 * 必须要在设置了画笔Paint的文字大小,宽度等属性,
 * 才能获取FontMetrics
 * Paint.FontMetrics fontMetrics=paint.getFontMetrics();
 *         fontMetrics.top
 *         fontMetrics.ascent
 *         fontMetrics.descent
 *         fontMetrics.bottom
 */

public class TwwView extends View {
    public TwwView(Context context) {
        this(context,null);
    }

    public TwwView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public TwwView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //背景框
        Paint paint = new Paint();
        paint.setColor(Color.YELLOW);
        paint.setStyle(Paint.Style.FILL);
        RectF rectF = new RectF(200,200,800,600);//逆时针
        canvas.drawRect(rectF,paint);

        Paint textPaint = new Paint();
        textPaint.setColor(Color.BLUE);
        textPaint.setStrokeWidth(5);
        textPaint.setStyle(Paint.Style.FILL);
        textPaint.setTextSize(50);
        textPaint.setTextAlign(Paint.Align.CENTER);

        String string ="base Text";
        //计算基线baseLine 文字基线类似于一个坐标0点
        Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
        Log.d("tww","fontMetrics.bottom:"+fontMetrics.bottom);
        Log.d("tww","fontMetrics.top:"+fontMetrics.top);
        Log.d("tww","fontMetrics.ascent:"+fontMetrics.ascent);
        Log.d("tww","fontMetrics.descent:"+fontMetrics.descent);
         /*
        * 距离 = 文字高度的一半 - 基线到文字底部的距离(也就是bottom)
            = (fontMetrics.bottom - fontMetrics.top)/2 - fontMetrics.bottom
        * */
        float distance = (fontMetrics.bottom-fontMetrics.top)/2-fontMetrics.bottom;
        //文字的y点=就是矩形的中心Y值+矩形中心到基线的距离
        float baseLine = rectF.centerY()+distance;
        canvas.drawText(string,rectF.centerX(),baseLine,textPaint);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值