android canvas drawText()文字居中效果

 更新时间:2021年09月26日 14:59:16   作者:zhuliyuan丶  
这篇文章主要为大家详细介绍了android canvas drawText()文字居中效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文跟大家分享下我关于drawText()文字居中的方法。

先附上drawText()的方法说明

说实话当时看了这个,我也没明白这个x,y坐标到底表达的啥意思,还一直以为是绘制文字中心的坐标,后来发现这个理解是错误的
要想理解这个首先看张图

像图上这样安卓的文字绘制是相对于基线绘制的,也就是图中的红线,而top+bottom的长度就等于字体高度.即等于|top|+|bottom|绝对值

实际绘制的时候取决于基线上一个点来绘制文字,而这个点有三种分别对应为left,center,right如下图

而drawText()方法中x,y坐标所指的点就是上图基线上三个点中的一个,具体是哪一个根据paint的setTextAlign()方法设置,默认为left
示例代码如下

Rect rect = new Rect(100,100,500,500);//画一个矩形 
    Paint rectPaint = new Paint(); 
    rectPaint.setColor(Color.BLUE); 
    rectPaint.setStyle(Paint.Style.FILL); 
    canvas.drawRect(rect, rectPaint); 
 
    Paint textPaint = new Paint(); 
    textPaint.setColor(Color.WHITE); 
    textPaint.setTextSize(50); 
    textPaint.setStyle(Paint.Style.FILL); 
    //该方法即为设置基线上那个点究竟是left,center,还是right 这里我设置为center 
    textPaint.setTextAlign(Paint.Align.CENTER); 
 
    Paint.FontMetrics fontMetrics = textPaint.getFontMetrics(); 
    float top = fontMetrics.top;//为基线到字体上边框的距离,即上图中的top 
    float bottom = fontMetrics.bottom;//为基线到字体下边框的距离,即上图中的bottom 
 
    int baseLineY = (int) (rect.centerY() - top/2 - bottom/2);//基线中间点的y轴计算公式 
 
    canvas.drawText("你好世界",rect.centerX(),baseLineY,textPaint); 

这里有点要注意textPaint.getFontMetrics()这个方法一定要在设置字体大小或者样式等等一系列会影响字体的方法后在调用,不然获取到的top和bottom值不准.

效果如下

正好是在中间的,即证明等式是没有问题的,再来分析这个等式是如何计算的

之所以drawText()方法中x,y指的是基线中间的那个点,是因为setTextAlign(Paint.Align.Center)
那么要想在正中间显示文字,x只要为矩形的中点x坐标即可 x = rect.centerX()
要计算的就是基线中间图上红色点的y坐标了,看图可以发现红色点的y为矩形中点黑色点的y坐标+图中黑色点和红色点之间的距离
矩形y坐标为 rect.centerY()
黑色点和红色点之间的距离为相对于基线的(top+bottom)/2 - bottom
而 top是相对于基线的所以为负数,所以公式为 (-top+bottom)/2 - bottom简化下为-top/2 - bottom/2
所以最后计算为rect.centerY - top/2 - bottom/2.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android 虚拟按键与沉浸式的适配方法

    Android 虚拟按键与沉浸式的适配方法

    今天小编就为大家分享一篇Android 虚拟按键与沉浸式的适配方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Android学习之Span的使用方法详解

    Android学习之Span的使用方法详解

    这篇文章主要为大家详细介绍了Android中各种Span类的使用方法,文中的示例代码讲解详细,对我们学习Android有一定的帮助,需要的可以参考一下
    2022-06-06
  • Android TextWatcher内容监听死循环案例详解

    Android TextWatcher内容监听死循环案例详解

    这篇文章主要介绍了Android TextWatcher内容监听死循环案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 全面解析Android之ANR日志

    全面解析Android之ANR日志

    不论从事安卓应用开发,还是安卓系统研发,应该都遇到应用无响应(简称ANR)问题,当应用程序一段时间无法及时响应,则会弹出ANR对话框,让用户选择继续等待,还是强制关闭。本文将带你全面解析Android之ANR日志
    2021-06-06
  • android车牌识别系统EasyPR使用详解

    android车牌识别系统EasyPR使用详解

    这篇文章主要为大家详细介绍了android车牌识别系统EasyPR使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Adapter模式实战之重构鸿洋集团的Android圆形菜单建行

    Adapter模式实战之重构鸿洋集团的Android圆形菜单建行

    这篇文章主要介绍了Adapter模式实战之重构鸿洋集团的Android圆形菜单建行的相关资料,需要的朋友可以参考下
    2016-03-03
  • Android 集成Google Cast 异常问题解析

    Android 集成Google Cast 异常问题解析

    这篇文章主要为大家介绍了Android 集成Google Cast 异常问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Flutter 如何正确显示SnackBar

    Flutter 如何正确显示SnackBar

    Snackbar是Android支持库中用于显示简单消息并且提供和用户的一个简单操作的一种弹出式提醒。当使用Snackbar时,提示会出现在消息最底部,通常含有一段信息和一个可点击的按钮。本文主要介绍了Flutter 如何正确显示 SnackBar
    2021-05-05
  • Android Timer使用的实例代码

    Android Timer使用的实例代码

    这篇文章介绍了Android Timer使用的实例代码,有需要的朋友可以参考一下
    2013-10-10
  • Android数据存储几种方式讲解

    Android数据存储几种方式讲解

    在开发过程中,数据存取是较为频繁的,今天我们来了解下android几种常见的数据存取方式。在Android中,sharePreferences是一种轻量级的数据存储方式,采用键值对的存储方式,存储少量数据,支持基本类型的简单数据存储
    2022-12-12

最新评论