在Android中使用Canvas.drawText呈现清晰的文本

7

我正在做一个AppWidget,在其设置中,我让用户启用/禁用文本阴影。由于我无法通过RemoteViews类调用阴影方法,因此我正在编写一个“绘制”方法,动态绘制小部件及其容器。

但是在绘制文本时,它会变得有点模糊,不像使用TextView时那样清晰。我为文本绘制使用的唯一代码是:

Paint p = new Paint();
p.setAntiAlias(true);
p.setColor(Color.WHITE);

还有什么其他的技巧可以让它更加清晰吗?

3个回答

17
Paint paint = new Paint(Paint.LINEAR_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);

对我有用


2
这是我的文本绘制设置:
    textPaint = new Paint();
    textPaint.setStyle(Paint.Style.FILL);
    textPaint.setAntiAlias(true);
    textPaint.setARGB(255, 255, 255, 255);
    textPaint.setFakeBoldText(true);
    textPaint.setTextSize(textSize);

对我来说似乎工作得很好。


1
Paint paint = new Paint(Paint.LINEAR_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); 对我很有帮助。 - Tomas
谢谢你的提示。我会尝试一下,看看我的文本是否现在看起来更好了。 :) - Abhinav

0

text.setAntiAlias(true) (在硬件模式下) 只能在 API 18 及以上版本中使用,因此请使用以下代码设置您的图层类型。

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB && currentapiVersion < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
        this.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }

1
这段代码涉及到Android开发中的绘图模块。setAntiAlias(boolean)函数用于设置抗锯齿效果,参数为布尔值类型。此函数自API level 1版本就存在于SDK中。 - Tomas
@Tomas 请检查我修改过的答案。因为在API 18中,他们停止了在软件层面上的AntiAlias功能。 - Ali Imran
啊,是的。供以后参考:http://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported - Tomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接