ゲームを作っていると、どうしても描画処理が重くなる傾向があります。
そんなときは、ViewをSurfaceViewに呼びかえることで、
描画高速化を期待できます。
以下のようにコードを追加するだけで導入できるので、
お試しください。
■今までのView
public class MyView extends View
{
public MyView(Context context, AttributeSet attrs)
{
this(context, attrs);
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
~~描画処理~~
}
}
■SurfaceViewに呼び代えたもの
public class MySurfaceView extends SurfaceView
{
public MyView(Context context, AttributeSet attrs)
{
this(context, attrs);
getHolder().addCallback(new SurfaceHolder.Callback() {
public void surfaceDestroyed(SurfaceHolder surfaceholder) {
// nop
}
public void surfaceCreated(SurfaceHolder surfaceholder) {
doDraw(surfaceholder);
}
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
doDraw(surfaceholder);
}
});
}
private void doDraw(SurfaceHolder holder)
{
Canvas canvas = holder.lockCanvas();
if (canvas == null){ return; }
try
{
onDraw(canvas);
}
finally
{
if ( canvas != null )
{
holder.unlockCanvasAndPost(canvas);
canvas = null;
}
}
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
~~描画処理~~
}
}
オレンジの部分が、追加した処理です。
2011.6.18
NECO