onTouchEvent 可能被子 View(如 Button、ScrollView)攔截消費。若需在 Activity 層級捕獲所有觸摸,可覆寫 dispatchTouchEvent。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d("TOUCH", "dispatchTouchEvent: " + ev.getAction());
Toast.makeText(this, "Touch: " + ev.getAction(), Toast.LENGTH_SHORT).show();
return super.dispatchTouchEvent(ev);
}
dispatchTouchEvent 是觸摸事件分發入口,優先於 onInterceptTouchEvent 和子 View 的 onTouchEvent。true 表示事件已消費,不再向下分發(慎用)。Toast 可快速驗證回調是否觸發(Logcat 可能被過濾)。OnTouchListener。GestureDetector 配合 onTouchEvent。