Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ontouch event of OnTouchListener gets called twice in android

Tags:

android

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; } 
like image 226
AbhishekB Avatar asked Nov 18 '11 12:11

AbhishekB


1 Answers

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  } 
like image 96
Shailendra Singh Rajawat Avatar answered Oct 21 '22 22:10

Shailendra Singh Rajawat