リソースのSurfaceViewを使う

  1. リソースのSurfaceViewを使うには、getHolder()でSurfaceHolderを取得する。
  2. 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;
   }
  });
 }
}

ふんどしの持ち主

コメント

このブログの人気の投稿

Pythonのソースファイルの行番号を取得したい

Raspberry Pi 3 シリアルコンソール&シリアル通信

学習リモコン「リモコソ (RIMOKOSO1)」の設定