setOnTouchEvent 設定返回值為true 和 false的區別
阿新 • • 發佈:2019-02-06
View 類的 setOnTouchListener(OnTouchListener l)事件監聽,在構造 OnTouchListener 物件時需要重寫 onTouch(…)方法,這個方法的返回值是布林型別,
剛開始我按預設給定的返回值 false執行,發現只能監聽到這個 view 的“按下”事件,“移動”和“擡起”都不能夠監聽到;於是把返回值改為了 true,就都監聽到了。
但是隨後又遇到了一個問題,那就是:點選其他元件後,再點選這個 view 的時候獲取不到焦點!也就是click事件不響應了。我猜想一定是受到了 onTouch 方法的影響,查資料發現:
設為true 和 false的效果是有區別的: setOnTouchListener 單獨使用的時候返回值需要為true,這樣才能保證移動的時候能後獲取相應的監聽,而非一次監聽(即每次只有一個按下的事件) setOnTouchListener 和 setOnClickListener 同時使用時,onTouch 的返回值要設為 false,這樣既可以保證按下移動擡起事件可以被監聽,並且點選事件也會被監聽。於是,我又對這個 view 設定了setOnClickListener(雖然重寫的方法體中什麼也沒寫),並將onTouch 的返回值要設為 了false,結果就 既監聽到了Touch 也能監聽到 click 事件了,可以重獲焦點了!
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: ... break; case MotionEvent.ACTION_MOVE: ... break; case MotionEvent.ACTION_UP: ... break; } return false; // (或return true)
}
});