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

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

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

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(紫罗兰色线)给出的矩形:

android字体等宽,Android等宽字体大小相关推荐

  1. 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.c ...

  2. android用什么字体,关于 Android 默认字体以及对比微软雅黑字体

    wbpluto的手机中一共有9个字体文件:1个为时钟显示准备的Clockopia,4种样式的无衬线(Sans Serif)字体,4种样式的衬线(Serif)字体.关于衬线和无衬线,各位可以上网搜索一下 ...

  3. Android 为应用或Textview设置自定义字体,主流字体包

    文章目录 前言 一.assets是什么? 二.APP全局字体 2.1.引入库 2.2.在Application中初始化calligraphy 2.3.让指定的Activity配置自定义字体 2.3.1 ...

  4. android l字体,关于 Android 默认字体以及对比微软雅黑字体

    用了一段时间 Android 手机之后,不禁对系统中的字体产生了兴趣.因为看起来,Android 中使用的中文字体和 Windows 中使用的"微软雅黑"很像,我一度怀疑 Andr ...

  5. Android TextView设置部分文字的颜色字体和大小

    目录 一,通过Html实现 1,例如实现如下效果 2,为一段文字中某些字单独设置字体大小 3,设置字体 二,通过Span 相关知识 前言 有时候一个TextView显示很多文字,所有文字颜色,字体,大 ...

  6. android字体颜色黑色,Android中颜色选择器和改变字体颜色的实例教程

    1.构建一张七彩图: 我们经常看到这种样子的颜色选择器吧.. 然后其实右边的亮度选择是: 这样我们的代码就可以进行啦... // 创建七彩图片 private void init() { int[] ...

  7. android 动态修改控件的宽高

    今天,简单讲讲android如何动态设置控件的宽高. 这个其实也比较简单,但是之前做的时候出现了问题,代码里设置的宽高是dx,需要先转成dp.下面以RelativeLayout作为例子,简单记录一下. ...

  8. Android 系统(72)---Android系统增加字体库及修改系统默认字体

    Android系统增加字体库及修改系统默认字体 阅读数:53 转载出处:https://blog.csdn.net/hsaekong/article/details/80305263 前言 最近项目上 ...

  9. android 11.0 12.0添加系统字体并且设置为默认字体

    1.概述 在11.0 12.0系统定制化开发中,在产品定制中,有产品需求对于系统字体风格不太满意,所以想要更换系统的默认字体,对于系统字体的修改也是常有的功能,而系统默认也支持增加字体,所以就来添加楷 ...

  10. android设置应用字体大小,在Android应用程序改变的TextView的字体大小从原始设置更改字体大小(Font size...

    我想在我的应用程序指定我自己的文字大小,但我有这样一个问题. 当我在设备设置中更改字体大小,我的应用程序的字体大小TextView也会改变. Answer 1: 其实,设置字体大小只影响大小sp . ...

最新文章

  1. 为什么三维重建才是计算机视觉的最终归宿?
  2. 套接字没有连接并且没有提供地址_网络是怎样连接的 -- web服务器接到请求后将会做什么...
  3. S3C6410设备时钟源选择、启动方式选择和内存映射
  4. MySQL调优(二):数据类型和schema优化,MySQL8.0取消查询缓存的原因
  5. 20应用统计考研复试要点(part15)--应用多元分析
  6. 跟着内核学框架-从misc子系统到3+2+1设备识别驱动框架
  7. Modeling Deformable Objects from a Single Depth Camera
  8. 【Mysql】数据库的设计学习笔记
  9. MOSFET的SOA或者ASO是什么?
  10. 安防工程商选择千兆POE交换机的注意事项
  11. mysql索引需要注意什么意思_mysql索引需要了解的几个注意
  12. registration 计算机视觉
  13. 【Arduino实验】霍尔开关传感器例程
  14. android fake gps,Fake GPS Location
  15. 本科计算机专业介绍英语,计算机专业本科生英文简历模板
  16. 通往WinDbg的捷径(一
  17. [原创] 利用busybox, extlinux 在工控机CompactFlash(CF卡)上构建Linux系统(上)
  18. 手机麦克风权限在哪里开启_全民K歌麦克风设置在哪 开启麦克风权限步骤
  19. Kubernetes 的 crictl 和 ctr 管理命令
  20. Mybatis使用注解的方式执行存储过程并获取返回值

热门文章

  1. 500 Internal Server Error
  2. [洛谷P1156][codevs1684]垃圾陷阱
  3. 【BZOJ 1031】[JSOI2007]字符加密Cipher(后缀数组模板)
  4. visual studio code(vs code) 编译、运行、调试程序(调用g++)
  5. java的值传递和引用传递
  6. web前端性能调优(转载)
  7. WebService实现文件上传下载
  8. [转载] log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
  9. 2019牛客多校 Round2
  10. 2019暑假绍兴第一中学游记