2013年6月13日木曜日

SurfaceViewで描画範囲を限定する

SurfaceViewは描画時の座標指定で画面をはみ出して指定しても、きちんとその指定で描いてくれるので、普段はみ出し部分を気にしたりしないんですが、
今作っている新作アプリで1枚のSurfaceViewを上下に分けて使っているところがあって、いつも通りやってたら上の部分の描画が下の所にはみ出してしまう…
上の画面では等間隔のグリッドを透視投影して描いてる(赤い部分)んですが、下のほうがはみ出してしまっています。
こんなときは描画範囲を限定したい描画のところでCanvas.clipRect(Rect rect)するといいようです。
//限定したい範囲のRect作成
Rect clip = new Rect(0, 0, 640, 320);
canvas.save();
canvas.clipRect(clip);
//描画範囲限定の描画処理

canvas.restore();
ソースはこんな感じ。 
clipRectの指定が限定したくない描画に影響しないように、clipRectする前にcanvas.save()、終わった後にcanvas.restore()するのを忘れないようにしましょう。
結果はこんな感じ。
ちゃんとはみ出し部分が消えています。

0 件のコメント:

コメントを投稿