android的drawText方法的起始点问题

本文详细介绍了如何在Canvas中使文字水平和垂直居中显示的方法。通过调整startX和startY参数并结合Paint.FontMetrics来实现不同对齐方式的文字位置控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几个月前做弹幕,需要用到drawText,一开始弹幕的位置总是不太准确,调好之后也没有记录,今天有点空余时间,就写下来吧
方法: canvas.drawText(“都可能是策略调整”,startX,startY,paint);
其中startX不难理解,主要是startY,下面用一张图说明一下:
这里写图片描述
其中白色虚线框是view的边界。如果文字需要垂直居中,该如何算startY的值呢?
1. startY应该是base那条线(即红线)到view上顶点的距离
2.由1知:Paint.FontMetrics fontMetrics = paint.getFontMetrics();
textHeight= Math.ceil(fontMetrics.descent - fontMetrics.ascent);
//descent(即黄线)到view上顶点的距离
int d1 = view.getHeight()/2+textHeight/2;
startY = d1-(fontMetrics.descent-base);
startY = d1-fontMetrics.descent;

总结如下:
1.文字需要相对于view居中显示:
(1)startX:
当paint.setTextAlign(Paint.Align.CENTER)时startX为view宽度的一半;当paint.setTextAlign(Paint.Align.LEFT)时startX为view宽度的一半减去文字长度的一半;
;当paint.setTextAlign(Paint.Align.RIGHT)时startX为view宽度的一半加上文字长度的一半.默认是LEFT方式
(2)startY
startY需要传viewHeight/2+Math.ceil(fontMetrics.descent - fontMetrics.ascent)/2-fontMetrics.descent的值,不论是何种对齐方式
2.文字需要相对于view左上对齐显示:
(1)startX:
当paint.setTextAlign(Paint.Align.CENTER)时startX为文字长度的一半;当paint.setTextAlign(Paint.Align.LEFT)时startX为0;
;当paint.setTextAlign(Paint.Align.RIGHT)时startX为文字长度
(2)startY
startY需要传-fontMetrics.top。(不要漏掉负号,因为fontMetrics.top是负值)
2.文字需要相对于view右下对齐显示:
(1)startX:
当paint.setTextAlign(Paint.Align.CENTER)时startX为view宽度的一半加上文字长度的一半;当paint.setTextAlign(Paint.Align.LEFT)时startX为view宽度减去文字长度;
;当paint.setTextAlign(Paint.Align.RIGHT)时startX为view宽度
(2)startY
startY需要传view.getHeight()-fontMetrics.bottom

ps:获取文字长度的方法:paint.measureText(“uuuuuu”);!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值