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会派上用场).

点赞