可以在Android Canvas上为Drawable禁用消除锯齿功能吗?

时间:2013-01-17 01:52:00

标签: android graphics

在我的程序中,我正在尝试绘制像素艺术,并且不希望发生抗锯齿。我找到了为BitmapsDrawableBitmaps禁用抗锯齿功能的方法,但没有为Drawables禁用抗锯齿功能。是否无法为Drawables禁用抗锯齿?

我尝试了以下内容:

drawable.setDither(false);
drawable.setFilterBitmap(false);

正如vmironov所建议的,我试图删除画布上的任何过滤,如下所示:

DrawFilter filter = new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG, 0);

Canvas canvas = surfaceHolder.lockCanvas();

canvas.setDrawFilter(filter);

这有一个奇怪的效果,即在我的东芝Thrive上消除抗锯齿,但在我的Galaxy Nexus上没有。

Screenshots

任何见解都表示赞赏。

1 个答案:

答案 0 :(得分:5)

您可以使用CanvasPaintFlagsDrawFilter为整个Canvas.setDrawFilter(DrawFilter filter)停用抗锯齿功能:

final DrawFilter filter = new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG, 0);
final Canvas canvas = ...;

canvas.setDrawFilter(filter);

<强>更新

我查看了屏幕截图,我可以肯定地说这不是一个消除锯齿的问题。您看到的是bilinear filtration的结果,不幸的是,无法为硬件加速视图禁用它。作为一种解决方法,您可以使用软件光栅化来查看视图:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);