android – StaticLayout高度测量关闭

前端之家收集整理的这篇文章主要介绍了android – StaticLayout高度测量关闭前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图用字体 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();

纹理在顶部和底部有填充,具体取决于字体和大小,而文本完全适合位图,这是一个浪费的大量内存空间,并使其随机关闭.

我使用单线绘图测试,位图非常适合文本

paint.getTextBounds(label.text,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);

我试过从StaticLayout获取所有类型的指标,所有这些指标似乎都不在文本中:第0行界限,第0行顶部,最后一行底部……导致相同的填充问题.

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

解决方法

看一下 android developper页面,它看起来像是设计用于处理多行情况并且在另一个布局井旁使用,因此在文本行的顶部有空间,这样如果你将它直接放在另一个布局下面它将正确间隔.从本质上讲,它并不是为您想要实现的目标而设计的.

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

猜你在找的Android相关文章