holder = getHolder();SurfaceViewの「getHolder」でSurfaceHolderは取得できます。そして取得したSurfaceHolderの「addCallback」を呼び出して、コールバックに設定するインスタンスを指定します。これにより、サーフェイス上で何かの処理が行われると、コールバックに設定されたインスタンス内のメソッドが呼び出されるようになります。
holder.addCallback(this);
setFocusable(true);
requestFocus();
Canvas c = holder.lockCanvas();SurfaceViewでは、通常のViewのonDrawのように、引数でCanvasが渡されるわけではありません。ですから、最初にCanvasを取得するところから始めます。「lockCanvas」は、サーフェイスの表示をロックし、描画のためのCanvasを返します。そして「unlockCanvasAndPost」は画面のロックを解除して表示を更新します。SurfaceViewでは、このように「ロック→Canvas取得→描画→アンロック&更新」という一連の流れが描画の基本となるのです。
……Canvasを使って描画をする……
holder.unlockCanvasAndPost(c);
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
package jp.tuyano.sample; import android.content.Context; import android.graphics.*; import android.graphics.Paint.Style; import android.util.AttributeSet; import android.view.*; public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder; private float x, y; public MySurfaceView(Context context) { super(context); init(); } public MySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MySurfaceView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public void init() { holder = getHolder(); holder.addCallback(this); setFocusable(true); requestFocus(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} @Override public void surfaceCreated(SurfaceHolder holder) { x = getWidth() / 2; y = getHeight() / 2; draw(); } @Override public void surfaceDestroyed(SurfaceHolder holder) {} @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: x = event.getX(); y = event.getY(); draw(); } return super.onTouchEvent(event); } public void draw() { Canvas c = holder.lockCanvas(); c.drawColor(Color.WHITE); Paint p = new Paint(); p.setStyle(Style.FILL); p.setColor(Color.RED); c.drawCircle(x, y, 50, p); holder.unlockCanvasAndPost(c); } }
<< 前へ | 次へ >> |