在我的一个项目中,我试图通过使用自定义绘制方法将文本写到画布上来在TextView上显示文本。但是,文本的顶部已被修剪。我可以在文本视图的下半部分看到一些空白。这使我想到我在画布之外编写文本。但是我在写之前将画布原点设置为(0,0)。
@Override
public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom,
@NonNull Paint paint)
{
if (start >= end) {
return;
}
canvas.save();
canvas.translate(0,0);
final List<Strings> elements = mUtil.getElements();
int y1 = 0;
for(final String element: elements) {
canvas.drawText(element,
start,
end,
0,
y1,
paint);
y1 += mUtil.getLineHeight();
}
}
In the above code, I am writing each line at (x,y).
Line 1 (x, y) = (0,0)
Line 2 (x, y) = (0, lineHeight)
Line 3 (x, y) = (0, lineHeight*2)
.....
但是在屏幕上我只能看到一半的文本被修剪掉了。有人可以纠正我对将文本写到canav上的理解吗?在我的互联网搜索历史中,我发现画布是一个2D平面图,其左上角为(0,0)作为原点,右下角为(n,m)(其中n,m是非常大的数字)。所以我开始在(0,0)处写文本,但是它被修剪掉了:(
在花了一些时间之后,我发现有一个重力场使渲染混乱。
对于纯TextView,我们可以从(0,上升)开始在画布上渲染。由于文本渲染从上升点开始。