###前提・実現したいこと
surfaceviewで行っている処理を止めずに、surfaceviewをセットしているActivityでタッチイベントを取得してsurfaceviewの処理へタッチイベントで取得した座標を渡したい。
###発生している問題・エラーメッセージ
Activityでタッチイベントを取得するとsurfaceviewで行っていた処理が止まってしまう。
###該当のソースコード
public class MainActivity extends Activity{ private SurfaceView surfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); surfaceView = (SurfaceView)findViewById(R.id.SurfaceViewMain); mainView = new MainView(this,surfaceView); } @Override public boolean onTouchEvent(MotionEvent event){ if(event.getAction() == MotionEvent.ACTION_UP) { float x = event.getX(); if (MainView.lx > x) { MainView.lx--; } else if (MainView.lx < x) { MainView.lx++; } } return true; } } public class MainView extends SurfaceView implements surfaceHolder.Callback,Runnable{ static int lx =0 ; private boolean isAttached = true; private int speed = 5; private long t1 = 0,t2 = 0 ; public MainView(Context context, SurfaceView sv) { holder = sv.getHolder(); holder.addCallback(this); holder.setFixedSize(getWidth(), getHeight()); } @Override public void surfaceCreated(SurfaceHolder holder){ this.holder = holder; thread = new Thread(this); thread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder){ isAttached = false; thread = null; } @Override public void run(){ while(isAttached ) { draw(); } } public void draw() { Canvas canvas = holder.lockCanvas(); ly+=speed; canvas.drawColor(0xFF494949); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawRect(0, ly, 300, 300, paint); holder.unlockCanvasAndPost(canvas); // スリープ t2 = System.currentTimeMillis(); if(t2 - t1 < 16){ try { Thread.sleep(16 - (t2 - t1)); } catch (InterruptedException e) { } } } }
###補足情報(言語/FW/ツール等のバージョンなど)
java/android studio2.3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/03/23 00:01
2017/03/23 00:26
退会済みユーザー
2017/03/23 00:55