簡體   English   中英

OnTouchListener 的 Ontouch 事件在 android 中被調用兩次

[英]Ontouch event of OnTouchListener gets called twice in android

我正在創建一個應用程序,其中在運行時給定的兩個點之間生成一條線。
我看到的問題是每次點擊我的模擬器時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;
}

touchListener將被要求每MotionEvent.ACTION_DOWNMotionEvent.ACTION_UPMotionEvent.ACTION_MOVE 所以如果你只想執行一次代碼,即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
            }
        });

有時在同一個父級下處理許多視圖會導致多次調用 onTouch(如果它們彼此之上),我的解決方案是

 onTouch{ ... if(event.getAction() == MotionEvent.ACTION_DOWN && isTouchEnabled()){ enableTouch(false); //add your code here //then enableTouch at the end this.postDelayed(new Runnable() { @Override public void run() { enableTouch(true); } }, 500); } add static variable touch private static boolean enabled = true; private void enableTouch(boolean enabled){ this.enabled = enabled; } private boolean isTouchEnabled(){ return enabled; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM