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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...