6

扇形のクリッピング マスクを作成する必要があります。

以下を使用して描画できます。

paint.setColor(0x88FF0000);
paint.setStyle(Style.FILL);
canvas.drawArc(oval, 0, 30, true, paint);

クリッピングパスとして使用したいので、試しました:

Path path = new Path();
path.addArc(oval, 0, 30);
canvas.clipPath(path, Op.REPLACE);

ただし、addArc には useCenter パラメーターがないため、得られるのはセクターではなくセグメントです。

4

2 に答える 2

12

わかりました、クリッピング マスクを使用してこれを行う適切な方法はないようです。

ただし、を使用する別の方法がありPorterDuffXfermodeます。ApiDemos の Xfermodes を参照してください。

オペレーターdrawArcでイメージを使用してセクターを描画するだけです。DST_OUTこれにより、セクターで覆われたイメージの部分が見えなくなります (描画されません)。

paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(0xFFFFFFFF);
paint.setStyle(Style.FILL);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
drawable.draw(canvas);
canvas.drawArc(oval, 30, 90, true, paint);
于 2012-05-20T18:16:19.313 に答える
2

Android 用の AChartEngine ライブラリを微調整して、円グラフをドーナツ グラフに変える必要がありました。以下を交換する必要がありました。

canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint);

クリッピングを使用できるようにするには、Path クラスを使用します。次のコードは私のために仕事をしました:

Path path = new Path();
path.moveTo(oval.centerX(), oval.centerY());
path.addArc(oval, startAngle, sweepAngle);
path.lineTo(oval.centerX(), oval.centerY());
canvas.drawPath(path, paint);

Canvas API に慣れていない私自身の頭痛の種が少しでも減ることを願っています。

于 2013-04-24T06:30:21.580 に答える