Android 中 onTouch 和OnClick 沖突的處理

在Android中,對一個View同時調用OnTouch事件和OnClick事件時,導致事件沖突,比如onClick事件打算執行A動作,OnTouch事件
打算執行B動作,但是在實際使用時會發現,當調用OnTouch時,有可能會同時執行A,B兩個動作,這是因為OnClick事件本身就是在
OnTouch事件中發生的;
在onTouch事件中,如果返回true,就不會執行onClick,返回false,就同時執行onClick方法,要想把OnTouch和onClick事件完全的區
分,這裡想到瞭一個不是很完美但使用完全沒有錯誤的方法,就是在 OnTouch中的MotionEvent.ACTION_DOWN 時,記錄下點(X1,Y1),
在 MotionEvent.ACTION_UP 時,記錄下點(X2,Y2),然後比對 倆點之間的距離,如果小於一個較小數值(比如5),就認為是Click事
件,onTouch中返回false,如果距離較大,可以當作onTouch事件去處理,返回true:
示范如下:
public boolean onTouch(View v, MotionEvent event) { 
            if (event.getAction() == MotionEvent.ACTION_DOWN) { 
                x1 = event.getX(); 
                y1 = event.getY(); 
            } 
            if (event.getAction() == MotionEvent.ACTION_UP) { 
                x2 = event.getX(); 
                y2 = event.getY(); 
                if (Math.abs(x1 – x2) < 6) { 
                    return false;// 距離較小,當作click事件來處理 
                } 
                if(Math.abs(x1 – x2) >60){  // 真正的onTouch事件 
                } 
            } 
            return true;// 返回true,不執行click事件 
        } 

You May Also Like