T013)シンプルなsurfaceViewとonTouchListener
目的
LinearLayoutにButton , SurfaceView を配置。
Button に OnTouchListener をセットして、ACTION_DOWNで
SurfaceViewに円を描画する。
SurfaceViewには、「getHolder()」というSurfaceHolderを取得するメソッドがあります。さらにSurfaceHolderには、「lockCanvas()」というCanvasを取得するメソッドがあります。ここで取得したキャンバスに自由に描画し、最後にSurfaceHolderのunlockCanvasAndPost(Canvas)を呼び出して描画を完了します。
point
canvas
Canvas canvas = surface.getHolder().lockCanvas(); //canvasへの描画処理 surface.getHolder().unlockCanvasAndPost(canvas);
setOnTouchListener(内部クラス)
View.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //処理 return true; } });
動作
Main.java
package com.example.t013_simple_surfaceview; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.FrameLayout; import android.widget.LinearLayout; public class Main extends Activity { Context context; FrameLayout frame; LinearLayout base; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getApplicationContext(); //instance frame = new FrameLayout(context); base = new LinearLayout(context); final Button btn = new Button(context); final SurfaceView surface = new SurfaceView(context); //set setContentView(frame); //addView frame.addView(base); base.addView(btn); base.addView(surface); //property base.setOrientation(LinearLayout.VERTICAL); base.setBackgroundColor(Color.GRAY); btn.setText("ボタンだよ"); btn.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: btn.setText("押した---------"); break; case MotionEvent.ACTION_UP: btn.setText("離した"); break; } //surface Canvas canvas = surface.getHolder().lockCanvas(); Paint paint = new Paint(); paint.setColor(Color.BLUE); canvas.drawCircle(100, 100, 40, paint); surface.getHolder().unlockCanvasAndPost(canvas); return true; } }); } }