2013-09-11

[Java, Android] くり抜かれた円、四角を Canvas に描く方法。

Canvas 覗き穴やスコープごしに見ているような描画をする方法がわからなくてなかなか時間がかかりましたが、なんとか実現できましたので備忘録として公開します。

[最終結論]
Path.Direction.CCW を使うと画像をくり抜くことができる。





はじめは、

canvas.drawColor(Color.BLACK);
Path path = new Path();
path.addCircle(300, 300, 100, Path.Direction.CCW);
canvas.clipPath(path);

というようにクリッピングを使って「指定したところ以外は描画しない」設定をしていたのですが、これでは、黒く塗りつぶした部分は描画できなくなってしまいます。
私のやりたいことは以下のようなものだったので、いつものごとくGoogleで情報を探してみました。
(わかりにくいですが、弾丸が右下に表示されています。)




すると、

[プログ - Pathを切り抜くには]
http://www.seeda.jp/modules/d3blog/details.php?bid=28&cid=7

に公開されている情報がまさにそれでした。


paint.setColor(Color.BLACK);
Path path = new Path();
path.addRect(0, 0, canvasWidth, canvasHeight, Path.Direction.CW);  // ①
path.addCircle(300, 300, 100, Path.Direction.CCW); // ②
canvas.drawPath(path, paint); // ③


①黒で全部を塗りつぶした new Path() を用意します。
②「Path.Direction.CCW」を設定した円を追加(つまり、円をくり抜く作業です)
③キャンバスに描画


ちなみに Path.Direction.CCW は描画方向を意味しています。
CW(Clockwise) => 時計回り, CCW(Counter clockwise) => 反時計回り
反時計回りは、Anticlockwise だけだと思っていましたが違う表現もあるのですね。


貴重な情報を紹介してくれている上記のブログには大感謝です。

0 件のコメント:

コメントを投稿