既存の円の一部の上にオーバーレイする円弧を描画しようとしています。どちらの円も完全にうまく描画されますが、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'
誰かがこれを引き起こしている可能性があることを知っていますか?