android字体等宽,Android等宽字体大小

我正在做一个图形代码编辑器,我可以通过拖动来修改常量.

我想突出显示代码中带有蓝色矩形的命令,使得左边框和右边框位于字符的中间,但在某些情况下蓝色矩形仍然未对齐:

我的想法是首先计算字符宽度和字符空间,然后将它们乘以我的文本中的命令位置.

val mCodePaint = new TextPaint()

mCodePaint.setTypeface(Typeface.MONOSPACE)

mCodePaint.setAntiAlias(true)

mCodePaint.setSubpixelText(true)

mCodePaint.setColor(0xFF000000)

val dimText = new Rect()

val dimText1 = new Rect()

val dimText2 = new Rect()

final val s1 = "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"

final val s2 = "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"

// dimText1.width() = char_length * s1.length + space_between_chars*(s1.length-1)

// dimText2.width() = char_length * s2.length + space_between_chars*(s2.length-1)

def getCharWidth(): Float = {

mCodePaint.getTextBounds(s1,s1.length,dimText1)

mCodePaint.getTextBounds(s2,s2.length,dimText2)

(dimText2.width() * (s1.length - 1) - dimText1.width() *(s2.length - 1))/(s1.length - s2.length)

}

def getIntercharWidth(): Float = {

mCodePaint.getTextBounds(s1,dimText2)

(dimText1.width * s2.length - dimText2.width * s1.length)/(s1.length - s2.length)

}

// The main function that draw the text

def drawRuleCode(canvas: Canvas,...): Unit = {

var char_width = getCharWidth() // At run time,equals 29

var space_width = getIntercharWidth() // At run time,equals -10

for(action

...

val column = action.column

val length = action.length

val x1 = left_x+8 + column*char_width + (column-1)*space_width - 0.5f*space_width

val x2 = x1 + length*char_width + (length-1)*space_width + 1*space_width

rectFData.set(x1,y1,x2,y2)

canvas.drawRoundRect(rectFData,5,selectPaint)

}

for(line

...

canvas.drawText(s,left_x + 8,...,mCodePaint)

}

您对如何克服这种小对齐问题有任何想法吗?有时它会产生巨大的差异,特别是当表达很长时.

编辑:我绘制了计算文本边界,实际上它们是错误的.文本略大于getTextBounds(紫罗兰色线)给出的矩形:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值