返回顶部
首页 > 资讯 > 移动开发 >Android Canvas的drawText()与文字居中方案详解
  • 477
分享到

Android Canvas的drawText()与文字居中方案详解

居中canvasAndroid 2022-06-06 11:06:54 477人浏览 薄情痞子
摘要

自定义View是绘制文本有三类方法 // 第一类 public void drawText (String text, float x, float y, Paint pai

自定义View是绘制文本有三类方法


// 第一类
public void drawText (String text, float x, float y, Paint paint)
public void drawText (String text, int start, int end, float x, float y, Paint paint)
public void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)
public void drawText (char[] text, int index, int count, float x, float y, Paint paint)
// 第二类
public void drawPosText (String text, float[] pos, Paint paint)
public void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)
// 第三类
public void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)
public void drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)

其中drawText()最常用,drawPosText ()是根据一个个坐标点指定文字位置,drawTextOnPath ()是根据路径绘制。但drawText()的x,y参数是干嘛的呢?

先来测试


Paint paint=new Paint();
 paint.setStyle(Paint.Style.FILL);
 paint.setStrokeWidth(12);
 paint.setTextSize(100);
 String text="测试:my text";
 canvas.drawText(text, 200, 400, paint);
 //画两条线标记位置
 paint.setStrokeWidth(4);
 paint.setColor(Color.RED);
 canvas.drawLine(0, 400, 2000, 400, paint);
 paint.setColor(Color.BLUE);
 canvas.drawLine(200, 0, 200, 2000, paint);

左对齐-left

可以看到,x,y并不是指定文字的中点位置,并且x,y与文字对齐方式有关(通过setTextAlign()指定,默认为left)

居中对齐-center

右对齐-right

(为了使文字完整,上面调整了下x,y的值)

从上面三种情况得出结论,x所对应的竖线:

左对齐 — 文字的左边界 居中对齐 — 文字的中心位置 右对齐 — 文字的左边界

y对应的横线并不是文字的下边界,而是基准线Baseline

看下面这张图


红色的Baseline是基准线,紫色的Top是文字的最顶部,也就是在drawText()中指定的x所对应,橙色的Bottom是文字的底部。

拿这些值如何获取呢?


Paint.FontMetrics fontMetrics=paint.getFontMetrics();
 fontMetrics.top
 fontMetrics.ascent
 fontMetrics.descent
 fontMetrics.bottom

记得要在设置完Paint的文字大小,宽度之类属性后再获取FontMetrics,
baseline对应对应值为0,在它下面的descent和bottom值为正,top和ascent为负。那文字的高度为bottom - top


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


好啦,把drawText()中x,y参数讲清楚后实现文字居中就很容易了

直接上代码


//矩形背景
 Paint bgRect=new Paint();
 bgRect.setStyle(Paint.Style.FILL);
 bgRect.setColor(Color.YELLOW);
 RectF rectF=new RectF(200, 200, 800, 600);
 canvas.drawRect(rectF, bgRect);
 Paint textPaint=new Paint();
 textPaint.setStyle(Paint.Style.FILL);
 textPaint.setStrokeWidth(8);
 textPaint.setTextSize(50);
 textPaint.setTextAlign(Paint.Align.CENTER);
 String text="测试:my text";
 //计算baseline
 Paint.FontMetrics fontMetrics=textPaint.getFontMetrics();
 float distance=(fontMetrics.bottom - fontMetrics.top)/2 - fontMetrics.bottom;
 float baseline=rectF.centerY()+distance;
 canvas.drawText(text, rectF.centerX(), baseline, textPaint);

效果


将对齐方式设置为center,那要让文字居中显示,x值就为矩形中心x值,y值也就是baseline的计算看下图


y = 矩形中心y值 + 矩形中心与基线的距离


距离 = 文字高度的一半 - 基线到文字底部的距离(也就是bottom)
 = (fontMetrics.bottom - fontMetrics.top)/2 - fontMetrics.bottom

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对编程网的支持。

您可能感兴趣的文章:Android canvas drawText()文字居中效果Android Canvas drawText文字居中的一些事(图解)


--结束END--

本文标题: Android Canvas的drawText()与文字居中方案详解

本文链接: https://lsjlt.com/news/28453.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android Canvas的drawText()与文字居中方案详解
    自定义View是绘制文本有三类方法 // 第一类 public void drawText (String text, float x, float y, Paint pai...
    99+
    2022-06-06
    居中 canvas Android
  • Android Canvas之drawBitmap方法案例详解
    前面讲了paint,后面会花几篇主要讲讲canvas,并且由于最近项目比较紧,所以近期的文章都会“短小精悍”; paint 作为画笔,里面有非常多而强大的设置方法,比如设置颜色过滤器...
    99+
    2024-04-02
  • 小程序canvas中文字设置居中锚点的示例
    小编给大家分享一下小程序canvas中文字设置居中锚点的示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 小程序中经常会遇到要生成图片的需求,图片一般会加上用户的头像和昵称之类的,头像只需要把腾讯域名添加到re...
    99+
    2023-06-09
  • css把文字居中的方法
    小编给大家分享一下css把文字居中的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是csscss是一种用来表现HTML或XML等文件样式的计算机语言,主要...
    99+
    2023-06-14
  • css设置文字居中的方法
    这篇文章主要介绍了css设置文字居中的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法:1、使用text-align属性设置文字水平居中,语法“text-align:c...
    99+
    2023-06-14
  • wps文字上下居中的方法
    这篇文章主要介绍“wps文字上下居中的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“wps文字上下居中的方法”文章能帮助大家解决问题。首先选中想要上下居中的文字。 接着右键它,将鼠标放到“单元格...
    99+
    2023-07-02
  • Android中搜索图标和文字居中的EditText实例
    效果图:需要自定义view,具体实现如下:import android.widget.EditText;import android.content.Context;import android.content.res.TypedArray...
    99+
    2023-05-31
    android 搜索 图标
  • css实现文字垂直居中的方法
    这篇文章将为大家详细讲解有关css实现文字垂直居中的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css的全称是什么css的全称是Cascading Style Sheets(层叠样式表),它是一种用...
    99+
    2023-06-14
  • css让文字居中的方法是什么
    今天小编给大家分享一下css让文字居中的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用line-height属...
    99+
    2023-07-04
  • 怎么用DIV+CSS解决文字与图片居中问题
    这篇文章主要讲解了“怎么用DIV+CSS解决文字与图片居中问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用DIV+CSS解决文字与图片居中问题”吧!...
    99+
    2024-04-02
  • Android 让自定义TextView的drawableLeft与文本一起居中
    前言   TextView的drawableLeft、drawableRight和drawableTop是一个常用、好用的属性,可以在文本的上下左右放置一个图片,而不...
    99+
    2022-06-06
    居中 Android
  • Android中ImageView无法居中的问题解决方法
    代码如下:[java] 代码如下:<LinearLayout         android:lay...
    99+
    2022-06-06
    方法 居中 Android
  • React Native 中处理 Android 手机吞字的解决方案
    目录复现问题解决问题示例React Native App 在部分型号的 Android 手机上,可能会发生文字显示不全的问题。 官方也有一个 相关的 Issue ...
    99+
    2022-11-13
    React Native Android 手机吞字 React Native 手机吞字
  • css设置文字居中的两种方法是什么
    本文小编为大家详细介绍“css设置文字居中的两种方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“css设置文字居中的两种方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、利用text-alig...
    99+
    2023-06-30
  • 详解PHP读取数据库时中文乱码的原因与解决方案
    标题:解决PHP读取数据库时中文乱码问题的方法与示例 在现代的Web开发中,PHP作为一种流行的服务器端语言被广泛应用于与数据库交互的场景中。然而,当涉及到读取数据库中存储的中文数据时...
    99+
    2024-04-02
  • Android handle-message的发送与处理案例详解
    1、Handle,MessageQueue,Message类图 Handle: 处理消息,并提供一系列函数帮忙我们创建消息和插入消息到消息队列中 创建handle实例--PbapCl...
    99+
    2024-04-02
  • 一文详解C++中的引用与关键字auto
    目录一.引用1.引用的概念2.引用的使用和问题3.引用与指针的比较二.关键字auto一.引用 1.引用的概念 引用就是给一个已经存在的变量取一个别名,与变量共用一段内存空间。注意引用...
    99+
    2023-05-16
    C++ 引用 关键字auto C++引用 C++ 关键字auto
  • 一文详解Node.js中的npm与包【万字教程】
    包什么是包Node.js中的第三方模块又叫做包,指的是同一种东西,知识叫法不同包的来源不同于Node.js的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。【相关教程推荐:nodejs视频教程】注意:Node.js...
    99+
    2022-11-22
    nodejs node npm
  • Android Studio最新版本中实现TextView字体加粗、水平居中和垂直居中的方法
    Android Studio最新版本中实现TextView字体加粗、水平居中和垂直居中的方法 在Android应用程序开发中,TextView是常用的控件之一,用于在界面上显示文本内容。有时候我们需要...
    99+
    2023-10-24
    android studio android ide Android
  • linux下python中文乱码解决方案详解
    1. 场景描述 linux服务器下安装了Anaconda3,执行Pyhton的K-means算法,结果出现如下图的中文字符乱码。上次已经解决了,忘记记录解决流程了,这次配置了一台新的服务器,又出现,默认不配置的话mat...
    99+
    2022-06-04
    linux python 中文乱码 解决方案
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作