2012-05-13 16 views
6

円のセクターの形をしたクリッピングマスクを作成する必要があります。Path.addArcを使用した円形の扇形のクリッピングマスク?

私は、次を使用して1を描画することができる午前:

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はありません。しかし、私が得るものはセクターではなくセグメントです。

答えて

12

[OK]をクリッピングマスクを使用してこれを行う適切な方法はないようです。

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

DST_OUT演算子を使用して、画像上にdrawArcを使用してセクタを描画します。これにより、セクタに覆われた画像の一部が非表示になります(描画されません)。

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); 
2

Android用AChartEngineライブラリを調整して、円グラフをドーナツチャートにする必要がありました。私は次のものを置き換える必要がありました:クリッピングを使用できるようにPathクラスを使用して、次のものを置き換える必要がありました:

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

次のコードは、私のために仕事をした:

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); 

私は、これは自分自身のようにキャンバスのAPIに精通していない人たちにいくつかの頭痛を節約できます願っています。

関連する問題