Android Cannas.drawTextView 方法坐标问题

Android Cannas.drawTextView 方法坐标问题

  • 先看看我们把drawText方法里面x,y的位置设置为0的效果吧

canvas.drawText("哈哈哈", 0, 0, mPaint);

这里写图片描述

  • 看到上面的图片了吧,是不是觉得很奇怪,为什么只显示字体的脚呢 ?
    • 我们输入的坐标0.0,是在控件的左上角,按我们之前对android坐标系的了解,大家是不是都觉的文字应该是在左上角从上到下的显示出来,而不是只显示在左上角的位置,其实这个跟基线有关系.

这里写图片描述

  • 如果我们y坐标设置为0的话,那基线的位置就是在0,这样就会导致我们的文字只显示脚的问题了

这里写图片描述

  • 我们现在就来让文字显示在控件的中间吧,要实现这个效果其实很简单,只要我们修改基线的位置就ok了,让文字居中有3中方式,其实都是差不多的,所以这里我就只讲解其中一种了
  • 思路:
    • 在Paint中我们可以获取到上图所有线的位置
    • 先计算出字体的总高度,其实就是Ascent 到 Descent 的位置了
    • 再用Ascent - 去字体高度的一半,就得到了我们要移动基线的距离了

private void initPaint() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setTextSize(30);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        String str = "哈哈哈";

        //方式一
        float textWidth = mPaint.measureText(str);  //获取文字的宽度
        float x = (getMeasuredWidth() - textWidth) / 2; //x的位置
        float y = getMeasuredHeight() / 2 + 
          (-mPaint.ascent() - (mPaint.descent() - mPaint.ascent()) / 2);
        canvas.drawText(str, x, y, mPaint);
    }

这里写图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值