I am creating an appliction in which a line gets generated between two points given at runtime.
The problem that I see is that onTouch()
is called twice for every click on my simulator. I know that two actions (ACTION_DOWN
& ACTION_UP
) are checked. But I want my app to call onTouch()
just once. Please give me some ideas. This is the code that I used:
SurfaceView surfaceview = new SurfaceView(getContext()); SurfaceHolder h = surfaceview.getHolder(); int action = event.getActionMasked(); synchronized(h) { if (action == MotionEvent.ACTION_DOWN && action!=MotionEvent.ACTION_CANCEL)// && flag==true) { Log.d("TouchView","ACTION_DOWN "); Point pointer = new Point(); pointer.x = (int) event.getX(); pointer.y = (int) event.getY(); touchPoint.add(pointer); view.invalidate(); Log.d("MotionEvent.ACTION_DOWN", "point: " + pointer); action = MotionEvent.ACTION_CANCEL; flag = false; } else if(action == MotionEvent.ACTION_UP && action!=MotionEvent.ACTION_CANCEL)// && flag==true) { Log.d("TouchView","ACTION_UP"); Point pointer = new Point(); pointer.x = (int) event.getX(); pointer.y = (int) event.getY(); touchPoint.add(pointer); view.invalidate(); Log.d("MotionEvent.ACTION_UP", "point: " + pointer); action = MotionEvent.ACTION_CANCEL; flag = false; } else return false; }
touchListener will be called for every MotionEvent.ACTION_DOWN
, MotionEvent.ACTION_UP
, and MotionEvent.ACTION_MOVE
. so if you want to execute code only once , ie MotionEvent.ACTION_DOWN
then inside
onTouch() if (event.getAction() == MotionEvent.ACTION_DOWN) { //your code }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With