2016-02-15 157 views
-1

我在我的UI上創建了一種用於註冊和攔截觸摸的遮罩。 我的問題是我需要知道用戶何時單擊UI視圖並使用該知識執行操作。使用onTouch模擬onClick監聽器

例如我想知道用戶點擊了Button。我用onTouch偵聽器在它上面創建一個不可見的圖層。

layer.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        if(event.getAction() == MotionEvent.ACTION_DOWN) { 
         registerTouch(); 
        } 

        return false; 
       } 
      }); 

感謝,我知道用戶點擊過按鈕,該按鈕仍是點擊,因爲我沒有消費這個事件。

問題是 - 當用戶觸摸該UI元素,並移動手指,該按鈕沒有按下,但我仍然註冊它被按下。 我不能使用onClickListener,因爲它不會通過我的不可見層傳遞。

我應該如何使用onTouches「模擬」onClick? (下面的例子是我整個模塊的簡化邏輯,有人可能會建議把所有的東西都移動到按鈕的onClickListener中,但是我的項目的整個想法是爲整個應用程序中的不同元素創建一種通用邏輯)

+0

如何使用其他MotionEvent動作,例如ACTION_BUTTON_PRESS?否則,如果出於某種原因,您僅限於ACTION_DOWN,則需要將相同的邏輯添加到Android用於確定「單擊」事件的代碼中。 (因爲,正如你已經看到的,簡單的觸摸不等於點擊。) – NightSkyDev

回答

0

我認爲GestureDetector會做你想做的。您創建了一個帶有OnGestureListener回調函數的GetureDetector實例。這些回調將在解釋流過它的MotionEvent時觸發。

您也可以考慮使用GestureOverlayView來替換透明覆蓋圖,因爲它聽起來像幾乎完全相同的東西。