2

既存の円の一部の上にオーバーレイする円弧を描画しようとしています。どちらの円も完全にうまく描画されますが、drawArc()呼び出しもdrawRect()呼び出しも何もしないようです。アプリはクラッシュしません。例外はありません。黙って失敗するだけです。

onDraw()コード:

@Override
protected void onDraw(Canvas canvas) {
    int width = getWidth();
    int height = getHeight();

    int size = (width > height) ? height : width;

    float cx = width / 2;
    float cy = height / 2;
    float radius = size / 2;

    float left = cx - radius;
    float right = cx + radius;
    float top = cy - radius;
    float bottom = cy + radius;

    RectF rect = new RectF(left, top, right, bottom);
    RectF rect2 = new RectF(canvas.getClipBounds());

    Log.d("MyTag", "Left: " + rect.left + "Right: " + rect.right + "Top: " + rect.top + "Bottom: " + rect.bottom);
    Log.d("MyTag", "Left: " + rect2.left + "Right: " + rect2.right + "Top: " + rect2.top + "Bottom: "
            + rect2.bottom);

    canvas.drawCircle(cx, cy, radius, circleRing);//Works
    canvas.drawCircle(cx, cy, radius - barWidth, innerColor);//Works
    canvas.drawArc(rect, 0, angle, true, circleColor);//Doesn't work
    canvas.drawRect(rect, circleColor);//Doesn't work

    super.onDraw(canvas);
}

circleColorペイントが正しく設定されていることを確認しangleました。これはアークの有効な値です。

私のペイントは、すべてのコンストラクターが使用できるように、{}ブロックで次のように設定されています。

{
    circleColor = new Paint();
    innerColor = new Paint();
    circleRing = new Paint();

    circleColor.setColor(color.holo_blue_light);
    innerColor.setColor(Color.BLACK);
    circleRing.setColor(Color.GRAY);

    circleColor.setAntiAlias(true);
    innerColor.setAntiAlias(true);
    circleRing.setAntiAlias(true);

    circleColor.setStrokeWidth(50);
    innerColor.setStrokeWidth(5);
    circleRing.setStrokeWidth(5);

    circleColor.setStyle(Paint.Style.FILL);
}

私が試したこと:

  • 座標のハードコーディング
  • サークルで使用されている塗料を使用する
  • drawArc()呼び出しのみが存在し、残りの描画をコメントアウトする
  • ハードウェアアクセラレーションの無効化

Logcatは、私のRectFに有効なポイントがあり、正方形を形成するために上下にスケーリングされていることを示しています。

01-25 13:33:39.877: D/MyTag(21612): Left: 0.0 Right: 720.0 Top: 159.0 Bottom: 879.0 //Mine
01-25 13:33:39.877: D/MyTag(21612): Left: 0.0 Right: 720.0 Top: 0.0 Bottom: 1038.0 //Canvas'

誰かがこれを引き起こしている可能性があることを知っていますか?

4

1 に答える 1

1

問題はラインだったことが判明

circleColor.setColor(color.holo_blue_light);

Android SDKはこれを次のように定義していますが、

ブルーの明るいホロシェード

定数値:17170450(0x01060012)

私のCanvasに関する限り、これは有効な色ではないようです(これは、API 14で追加されたものであり、Android 4.2でテストしているため、使用できるはずです)。ただし、もっと...通常の色を使用するように変更すると、正常に機能します。

circleColor.setColor(Color.GREEN);
于 2013-01-25T08:28:38.630 に答える