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

mka*_*tic 2 graphics android

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

我尝试过以下方法:

drawable.setDither(false);
drawable.setFilterBitmap(false);
Run Code Online (Sandbox Code Playgroud)

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

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

Canvas canvas = surfaceHolder.lockCanvas();

canvas.setDrawFilter(filter);
Run Code Online (Sandbox Code Playgroud)

这有一个奇怪的效果,删除我的东芝Thrive上的抗锯齿,但不是我的Galaxy Nexus.

截图

任何见解都表示赞赏.

Vla*_*nov 5

您可以Canvas使用PaintFlagsDrawFilter和禁用整个抗锯齿Canvas.setDrawFilter(DrawFilter filter):

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

canvas.setDrawFilter(filter);
Run Code Online (Sandbox Code Playgroud)

更新:

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

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Run Code Online (Sandbox Code Playgroud)