在Android 6.0上,当paint样式设置为Pain.Style.STROKE

时间:2015-10-17 18:49:16

标签: android canvas android-6.0-marshmallow drawrectangle

从Android 6开始,当paint style设置为Paint.Style.STROKE时,drawOval方法似乎绘制一个矩形而不是一个圆。 如果将paint样式设置为Paint.Style.FILL或FILL_AND_STROKE,则一切似乎都很好。 看看它在下一张照片中的样子。

Pre Android 6

预装Android 6

Android 6

Android 6

绿色矩形应该是刻度

的绿色圆圈

请注意,绘图是在尺寸为1.0f×1.0f的矩形中进行的。 除了6.0之外,所有Android版本都能正常运行。

谢谢

1 个答案:

答案 0 :(得分:1)

我通过使用辅助函数来管理它,将画布重新缩放到更大的矩形(100x100),绘制圆形并将缩放绘制回原始大小。

public static void drawOval(Canvas canvas, RectF rectangle, Paint paint, float scale) {
    float originalStrokeWidth = paint.getStrokeWidth();
    float upScaling = 100f;
    paint.setStrokeWidth(originalStrokeWidth * upScaling);
    canvas.save();
    RectF newRect = new RectF();
    newRect.left = rectangle.left*upScaling;
    newRect.top = rectangle.top*upScaling;
    newRect.right = rectangle.right*upScaling;
    newRect.bottom = rectangle.bottom*upScaling;
    canvas.scale(scale/upScaling, scale/upScaling);
    canvas.drawOval(newRect, paint);
    canvas.restore();
    paint.setStrokeWidth(originalStrokeWidth);
}
public static void drawOval(Canvas canvas, RectF rectangle, Paint paint) {
    drawOval(canvas, rectangle, paint, 1f);
}

所以,我在canvas.drawOval(rect,paint)的地方我用它替换它 CanvasUtils.drawOval(canvas,rect,paint);

我注意到" bug"只有当我使用位图作为画布并将该位图绘制为标尺的背景时才会发生。