Android 6.0不正确地处理drawCircle方法

在我的应用程序中,我需要使用位图和drawCircle()方法绘制圆圈。

一切工作正常,正如它应该一直到Android 6.0。

它仍然绘制所有以前的版本,但在6.0上使用应用程序时绘制矩形。 但是, 如果我改变它被填充,它将在api 22和api 23中绘制一个圆圈。任何人都有同样的问题或任何想法,为什么发生这种情况?

这里是源代码和屏幕截图(在左侧的API 23上运行的应用程序,右侧的API 22)。 同一个应用程序在不同的api上

public final class Circle1View extends View { private float xCenter, yCenter; private Bitmap grid = null; public Circle1View (Context context) { super(context); init(); } private void init() { setLayerType(View.LAYER_TYPE_SOFTWARE, null); } @Override protected void onDraw(Canvas canvas) { int w = getWidth(); int h = getHeight(); xCenter = w / 2; yCenter = h / 2; drawBitmaps(w, h); canvas.translate(xCenter, yCenter); canvas.scale(xCenter, yCenter); canvas.drawBitmap(grid, null, new RectF(-1, -1, 1, 1), null); } private void drawBitmaps(int w, int h) { grid = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(); canvas.translate(xCenter, yCenter); canvas.scale(xCenter, yCenter); Paint gridPaint = new Paint(); gridPaint.setStrokeWidth(0.01f); // Works with FILL // gridPaint.setStyle(Paint.Style.FILL); gridPaint.setStyle(Paint.Style.STROKE); canvas.setBitmap(grid); canvas.drawCircle(0, 0, 0.5f, gridPaint); } } 

Solutions Collecting From Web of "Android 6.0不正确地处理drawCircle方法"

我认为这与你所做的缩放和翻译有关。 想象一下,绘制的圆是如此之小,它只需要4个像素。 当放大到全尺寸时,这些像素之间留有4条直线。

当我将笔画宽度更改为0.04f时,问题就消失了。 我build议你直接在提供的Canvas上绘图来简化你的代码:

 @Override protected void onDraw(Canvas canvas) { int w = getWidth(); int h = getHeight(); xCenter = w / 2; yCenter = h / 2; Paint gridPaint = new Paint(); gridPaint.setStrokeWidth(1f); gridPaint.setStyle(Paint.Style.STROKE); canvas.drawCircle(xCenter, yCenter, w/4, gridPaint); } 

至于你关于API级别差异的问题:棉花糖引入了drawBitmap()变化。 你可以看一下各自的棒棒糖和棉花糖的源代码。