gpt4 book ai didi

android - StaticLayout 高度测量关闭

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:31 27 4
gpt4 key购买 nike

我正在尝试将多行文本绘制到字体为 Latto-Reg 的位图中, 而 StaticLayout 似乎有问题。

paint.setTextSize(label.fontSize);
paint.setTypeface(face);
StaticLayout textLayout = new StaticLayout(label.text, paint, (int)StaticLayout.getDesiredWidth(label.text, paint), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
Bitmap bitmapAux = Bitmap.createBitmap(textLayout.getEllipsizedWidth(), textLayout.getHeight(), Bitmap.Config.ALPHA_8);
canvas.setBitmap(bitmapAux);
canvas.save();
canvas.translate(0, textLayout.height());
textLayout.draw(canvas);
canvas.restore();

根据字体和大小,纹理在顶部和底部有填充,而文本完全适合位图,这是大量浪费的内存空间,并使其布局随机偏移。

Top/bot padding wrong

我使用单线绘图进行测试,位图与文本完美契合

paint.getTextBounds(label.text, 0, label.text.length(), rect);
Bitmap bitmapAux = Bitmap.createBitmap(rect.width(), rect.height(), Bitmap.Config.ALPHA_8);
canvas.drawText(label.text, -rect.left, -rect.bottom, paint);

pixel-perfect

我尝试从 StaticLayout 获取各种指标,但它们似乎都与文本不符:第 0 行边界、第 0 行顶部、最后一行底部...导致相同的填充问题。

编辑: 我通过使用基于偏移的单线图解决了这个问题。 StaticLayout 类仍然使用几种不同的非标准字体绘制不正确,我想知道原因。

最佳答案

查看 android developper页面,看起来它的设计旨在处理多行情况并在另一个 Layout 旁边很好地使用,因此文本行顶部有空间,因此如果您直接放置它在另一个 Layout 下方,它将被正确地隔开。从本质上讲,它并不是为您要实现的目标而设计的。

总的来说,从 Paint.getTextBounds() 获取文本边界可能更容易了解文本在 Layout 中的范围。

关于android - StaticLayout 高度测量关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20098189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com