目前我在迭代TextView文本的副本时使用paintObject.measureText(textCopy.substring(0,i))
。例如,measureText("abc".substring(0,1))
将给出相对x坐标'b'。我从layout.getLineTop()
获得的 y 坐标。这对非等宽字体的 x 坐标有效,但不准确。我可以稍微校准一下,但在每个设备上它的工作方式不同。
我能想到的最好的解决方案是覆盖负责在屏幕上绘制TextView的类,并希望获得绘制到屏幕上的每个角色的坐标。
有谁知道我需要覆盖什么类才能完成此任务?或者其他一些创意解决方案?
答案 0 :(得分:8)
好吧,这似乎是Paint.measureText()
或其他更深层次的错误。但我最终找到了解决方法:
layout.getPrimaryHorizontal(int offset)
这很容易。您只需使用其使用的文本长度迭代布局。
它将返回行位置的字符REGARDLESS的x。所以我仍然从layout.getLineTop()
获得了这些线条。顺便说一句,如果您使用layout.getLineTop()
,请注意有一些奇怪的行为,可能是一个错误。我已提交错误报告here。
答案 1 :(得分:0)
这是有关如何获取特定字符的x
和y
坐标的完整代码。 offset
是textView
文本中所需字符的索引。这些坐标是相对于父容器的
Layout layout = textView.getLayout();
if (layout == null) { // Layout may be null right after change to the text view
// Do nothing
}
int lineOfText = layout.getLineForOffset(offset);
int xCoordinate = (int) layout.getPrimaryHorizontal(offset);
int yCoordinate = layout.getLineTop(lineOfText);