android – RemoteViews(Widget)在使用Bitmap时有模糊文本
作者:互联网
要在我的小部件上放置自定义字体,我将创建一个包含其内部字体的位图,然后将该位图放入我的RemoteViews中.然而,位图上的文本非常模糊,与活动中的清晰程度相比,看起来非常像素化.
已经有很多应用程序在小部件上使用自定义字体.尽管如此,我还没有找到一个可行的方法.如果有人有更好的解决方案来解决这个问题,我很乐意听到它!
现在,这就是我用来创建位图并将其放在窗口小部件上的内容:
RemoteViews widgetView = new RemoteViews(this.getPackageName(), R.layout.widget);
widgetView.setImageViewBitmap(R.id.widgetImage, buildBitmap());
同
public Bitmap buildBitmap() {
Bitmap bitmap = Bitmap.createBitmap(160, 84, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
TextPaint textPaint = new TextPaint(TextPaint.LINEAR_TEXT_FLAG | TextPaint.ANTI_ALIAS_FLAG);
textPaint.setTypeface(getFont());
textPaint.setStyle(Style.FILL);
textPaint.setColor(fontColor);
textPaint.setTextSize(fontSize);
StaticLayout staticLayout = new StaticLayout(textString, textPaint, bitmap.getWidth(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
staticLayout.draw(canvas);
return bitmap;
}
罪魁祸首小工具!顶部的一个是自定义字体,中间的图像是位图上的默认Sans字体,以显示文本是模糊的,无论使用什么字体.
最后一个图像是使用默认的remoteView.setTextViewText(“Text”)时文本的样子;而不是位图.
对此问题的任何帮助将不胜感激!
解决方法:
你不能假设160×84.这是一个非常小的尺寸.缩放时,您可能会看到模糊.相反,您需要根据给定sp的文本测量结果来实际测量位图大小. Paint.measureText
对于获得宽度这些类型的东西有时很有用,但是你也需要高度来做正确的事,所以getTextBounds
可能更有用.您可能还需要添加一些填充,但这应该让您开始.正如您在照片中看到的那样,清晰度并不是您必须处理的唯一问题.你也必须弄清楚自动换行(也许这里有Paint.measureText
会派上用场).
标签:android,bitmap,android-widget,android-canvas,remoteview 来源: https://codeday.me/bug/20190703/1368870.html