我试图用字体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();
Run Code Online (Sandbox Code Playgroud)
纹理在顶部和底部有填充,具体取决于字体和大小,而文本完全适合位图,这是一个浪费的大量内存空间,并使其随机关闭.

我使用单线绘图测试,位图非常适合文本
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);
Run Code Online (Sandbox Code Playgroud)

我试过从StaticLayout获取所有类型的指标,所有这些指标似乎都不在文本中:第0行边界,第0行顶部,最后一行底部......导致相同的填充问题.
编辑:我通过使用基于偏移的单线绘图解决了这个问题.StillLayout类仍然使用几种不同的非标准字体绘制错误,我想知道原因.
纵观Android的developper页,它看起来像它的设计同时处理多行的情况和明年被用于另一个Layout很好,因此没有对文本行的顶部空间,因此,如果您将它直接放在下面的另一Layout它将正确间隔.从本质上讲,它并不是为您想要实现的目标而设计的.
总的来说,可以更容易地获取文本边界Paint.getTextBounds()以了解文本的范围Layout.
| 归档时间: |
|
| 查看次数: |
4660 次 |
| 最近记录: |