0

Android 6 以降、ペイント スタイルが Paint.Style.STROKE に設定されている場合、drawOval メソッドは円ではなく四角形を描画するように見えます。ペイント スタイルが Paint.Style.FILL または FILL_AND_STROKE に設定されている場合、すべて問題ないようです。次の写真でそれがどのように見えるかを見てください。

Android 6 より前

Android 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 に答える