Android 使用位图时,RemoteView(小部件)具有模糊文本
要在我的小部件上放置自定义字体,我将创建一个包含该字体的位图,然后将该位图放置到我的RemoteView中。然而,位图上的文本非常模糊,与活动中的清晰程度相比,它看起来确实是像素化的 已经有相当多的应用程序在小部件上使用自定义字体。不过,我还没有找到一个可靠的方法来做到这一点。如果有人对这个问题有更好的解决办法,我很乐意听到 现在,这就是我用来创建位图并将其放置在小部件上的内容:Android 使用位图时,RemoteView(小部件)具有模糊文本,android,bitmap,android-widget,android-canvas,remoteview,Android,Bitmap,Android Widget,Android Canvas,Remoteview,要在我的小部件上放置自定义字体,我将创建一个包含该字体的位图,然后将该位图放置到我的RemoteView中。然而,位图上的文本非常模糊,与活动中的清晰程度相比,它看起来确实是像素化的 已经有相当多的应用程序在小部件上使用自定义字体。不过,我还没有找到一个可靠的方法来做到这一点。如果有人对这个问题有更好的解决办法,我很乐意听到 现在,这就是我用来创建位图并将其放置在小部件上的内容: RemoteViews widgetView = new RemoteViews(this.getPackageNa
RemoteViews widgetView = new RemoteViews(this.getPackageName(), R.layout.widget);
widgetView.setImageViewBitmap(R.id.widgetImage, buildBitmap());
与
罪魁祸首!顶部的一个是自定义字体,中间的图像是位图上的默认Sans字体,以显示无论使用何种字体,文本都是模糊的 最后一个图像是使用默认的
remoteView.setTextViewText(“text”)时文本的外观代码>而不是位图
在此问题上的任何帮助都将不胜感激
你不能假设160x84。那是一个很小的尺寸。当缩放时,正如您所看到的,它很可能是模糊的。相反,您需要根据给定sp
处的文本测量值来实际测量位图大小。有时候这类东西很有用,可以得到宽度,但是你也需要高度来做正确的事情,所以可能更有用。您可能还需要添加一些填充,但这应该可以让您开始。正如你在照片中看到的,清晰度并不是你必须处理的唯一问题。您还必须弄清楚单词包装(也许这里是方便的地方)。您使用的ImageView
需要添加android:scaleType=“matrix”
属性。编辑小部件布局xml,并在需要时添加该属性。ImageView将不会尝试缩放图像以适应视图
正如之前的文章所说,你的像素尺寸是错误的。您应该维护每个小部件大小的记录,以便以后可以使用它创建位图
如果你需要帮助解决这个问题,我可以发布一些代码。接受这个答案,并专门发布另一个关于这个问题的帖子,我会用代码来回答。160x84的大小看起来太小了-你不应该调整屏幕密度吗?提醒我为什么你不能只拥有一个自定义字体的textview?@Tom,因为它是一个小部件<代码>远程视图
不允许您这样做。您好,任何人都可以在这个问题上提供帮助。我也有同样的问题。。!将160x84改为300x400肯定会有所不同!然而,它还不是小部件的实际大小。我尝试了measureText和getTextBounds。它们返回非常大的数字,例如Paint.measureText()返回7375。您是否使用适当的值调用了Paint对象上的“setTextSize”和“setTextScale”?现在我将18传递到setTextSize
,但不使用setTextScaleX
执行任何操作。更改setTextScaleX
只会将文本向左或向右拉伸,使其倾斜。请不要强迫用户接受答案或发布新的相关问题。如果你能帮忙,就帮忙。如果没有,就不要我没有勒索任何人。。我已经把他的问题的答案贴出来了。在重新阅读我的答复后,我可以看到它可能会以不同的方式出现,以及我的措辞如何可以更好。我只是说,另一个问题基本上是无关的,如果他想回答这个问题,他应该发布另一个问题。
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;
}