Android 通过在画布上写入在TextView上显示文本-文本被修剪

Android 通过在画布上写入在TextView上显示文本-文本被修剪,android,textview,android-canvas,Android,Textview,Android Canvas,在我的一个项目中,我试图通过使用自定义绘制方法将文本写入画布,从而在TextView上显示文本。但是文本的顶部正在被修剪。我可以在文本视图的下半部分看到一些空白。这让我觉得我是在画布之外写文章。但在编写之前,我将画布原点设置为(0,0) @Override public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom,

在我的一个项目中,我试图通过使用自定义绘制方法将文本写入画布,从而在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)
.....
@覆盖
公共空白绘制(@NonNull画布画布,字符序列文本,int开始,int结束,浮点x,int顶部,int y,int底部,
@非空油漆(油漆)
{
如果(开始>=结束){
返回;
}
canvas.save();
canvas.translate(0,0);
最终列表元素=multi.getElements();
int y1=0;
for(最后一个字符串元素:elements){
canvas.drawText(元素,
开始
完,,
0,
y1,
油漆);
y1+=multi.getLineHeight();
}
}
在上面的代码中,我在(x,y)处写每一行。
第1行(x,y)=(0,0)
第2行(x,y)=(0,线宽)
第3行(x,y)=(0,线宽*2)
.....

但在屏幕上我只能看到一半的文字被删掉了。有人能纠正我对在canavs上写这篇文章的理解吗。在我的互联网搜索历史中,我发现画布是一个二维平面,左上角的原点是(0,0),右下角的原点是(n,m)(其中n,m是非常大的数字)。因此,我开始在(0,0)处编写文本,但它被删掉了:(

在画布上花费了一些时间后,我发现有一个重力场扰乱了渲染


对于纯文本视图,我们可以从(0,上升)开始在canvase上进行渲染。因为文本渲染从上升点开始。

@Suragch有什么想法吗?
drawText()
方法与其他绘制方法略有不同。对于
drawText(),我们不需要传递指向绘制对象左上角的坐标
,坐标指向文本的左基线。