0

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

安卓 6 之前

安卓 6 之前

安卓 6

安卓 6

绿色矩形应该是比例尺上的绿色圆圈

请注意,绘图是在一个 1.0f x 1.0f 尺寸的矩形中绘制的。除 6.0 以外的所有 Android 版本都可以正常运行。

谢谢

4

1 回答 1

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);

我注意到只有当我使用位图作为画布并将该位图绘制为仪表的背景时才会发生“错误”。

于 2015-10-19T15:24:49.310 回答