キャンバスをより大きな長方形(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); に置き換えます。
ビットマップをキャンバスとして使用し、そのビットマップをゲージの背景として描画した場合にのみ「バグ」が発生することに気付きました。