OnTouchListener的Ontouch事件在android中被调用两次

我正在创build一个应用程序,在运行时给出的两个点之间生成一行。
我看到的问题是,我的模拟器上每次点击都会调用onTouch()两次。 我知道两个动作( ACTION_DOWNACTION_UP )被选中。 但是我希望我的应用只需要一次调用onTouch() 。 请给我一些想法。 这是我使用的代码:

 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; } 

每个MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP和MotionEvent.ACTION_MOVE都会调用touchListener。 所以如果你只想执行一次代码,也就是MotionEvent.ACTION_DOWN

 onTouch() if (event.getAction() == MotionEvent.ACTION_DOWN) { //your code } 

或者只是使用onClickListener:

  myButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { //do what you gotta do } });