- リソースのSurfaceViewを使うには、getHolder()でSurfaceHolderを取得する。
- SurfaceHolder.Callbackのインターフェイスを持つクラスをコールバックに登録する。
public class MyView implements SurfaceHolder.Callback, Runnable{
private SurfaceHolder mHolder;
private Thread mRun;
MyTouchActivity mMain;
// コンストラクタ
public MyView(MyTouchActivity myactivity, SurfaceView sv){
mMain = myactivity;
// リソースのSurfaceViewからSurfaceHolderを得てコールバックを設定する
mHolder = sv.getHolder();
mHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder){
mRun = new Thread(this);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder){
mRun = null;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
if(mRun != null){
mRun.start();
}
}
@Override
public void run(){
Paint p = new Paint();
while(mRun != null){
Canvas canvas = mHolder.lockCanvas();
canvas.drawColor(Color.BLUE);
p.setColor(Color.argb(255, 255, 255, 0));
canvas.drawCircle(mMain.mX, mMain.mY, 100, p);
mHolder.unlockCanvasAndPost(canvas);
}
}
}
public class MyTouchActivity extends Activity {
SurfaceView mSV;
public float mX, mY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_touch);
// SurfaceViewを参照
mSV = (SurfaceView)findViewById(R.id.surface);
// MyViewをインスタンス化
new MyView(this, mSV);
// タッチイベントの処理
mSV.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch (View v, MotionEvent event){
mX = event.getX();
mY = event.getY();
return true;
}
});
}
}
コメント
コメントを投稿