編輯:關於android開發
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP MyrelativeLayout dispatchTouchEvent: ACTION_UP
ViewGroup自己在dispatchTouchEvent中消費這個事件
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN onTouchEvent: Activity ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP onTouchEvent: Activity ACTION_UP
回傳到Activity中onTouchEvent消費事件
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOW MyrelativeLayout onInterceptTouchEvent ACTION_DO MyImageView dispatchTouchEvent: ACTION_DOWN MyImageView onTouchEvent: ACTION_DOWN MyrelativeLayout: onTouchEvent ACTION_DOWN onTouchEvent: Activity ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP onTouchEvent: Activity ACTION_UP
ViewGroup返回dispatchTouchEvent,會調用ViewGroup中的onInterceptTouchEvent方法,
如果onInterceptTouchEvent返回super.onInterceptTouchEvent(ev)
就回向下傳到子View
子View中調用dispatchTouchEvent與onTouchEvent方法
如果都返回的是super().再向上傳到ViewGroup,
這時調用ViewGroup的onTouchEvent,如果返回為super,
剛再向上返回給Activity,調用Activity的onTouchEvent消費
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN MyrelativeLayout onInterceptTouchEvent ACTION_DOWN MyrelativeLayout: onTouchEvent ACTION_DOWN onTouchEvent: Activity ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP onTouchEvent: Activity ACTION_UP
事件從Activty的dispatchTouchEvent開始
調用ViewGroup的dispatchTouchEvent,此時這裡返回super
會調用ViewGroup中的onInterceptTouchEvent攔截事件
onInterceptTouchEvent這裡返回true,說明攔截
就會交給ViewGroup的onTouchEvent
onTouchEvent這裡返回Suepr,不消費,就再向上傳給Activity
最後由Activty中的onTouchEvent來消費
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DO MyrelativeLayout onInterceptTouchEvent ACTION_D MyrelativeLayout: onTouchEvent ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP MyrelativeLayout dispatchTouchEvent: ACTION_UP MyrelativeLayout: onTouchEvent ACTION_UP
事件從Activty的dispatchTouchEvent開始
調用ViewGroup的dispatchTouchEvent,此時這裡返回super
會調用ViewGroup中的onInterceptTouchEvent攔截事件
onInterceptTouchEvent這裡返回true,說明攔截
就會交給ViewGroup的onTouchEvent
這裡onTouchEvent 返回 true表明,消費,事件到此結束不再傳遞
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN MyrelativeLayout onInterceptTouchEvent ACTION_DOWN MyrelativeLayout: onTouchEvent ACTION_DOWN onTouchEvent: Activity ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP onTouchEvent: Activity ACTION_UP
事件從Activty的dispatchTouchEvent開始
調用ViewGroup的dispatchTouchEvent,此時這裡返回super
會調用ViewGroup中的onInterceptTouchEvent攔截事件
onInterceptTouchEvent這裡返回true,說明攔截
就會交給ViewGroup的onTouchEvent
這裡onTouchEvent 返回 false表明,不消費,
事件會向上傳遞給Activity來調用onTouchEvent來消費
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN MyrelativeLayout onInterceptTouchEvent ACTION_DOWN MyImageView dispatchTouchEvent: ACTION_DOWN MyImageView onTouchEvent: ACTION_DOWN MyrelativeLayout: onTouchEvent ACTION_DOWN onTouchEvent: Activity ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP onTouchEvent: Activity ACTION_UP
從上到下
Activity dispatchTouchEvent
ViewGroup dispatchTouchEvent
ViewGroup onInterceptTouchEvent
子View的 dispatchTouchEvent
子View的 onTouchEvent
ViewGroud的 onTouchEvent
Acitivty 的 onTouchEvent
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN MyrelativeLayout onInterceptTouchEvent ACTION_DOWN MyImageView dispatchTouchEvent: ACTION_DOWN MyrelativeLayout: onTouchEvent ACTION_DOWN onTouchEvent: Activity ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP onTouchEvent: Activity ACTION_UP
前提ViewGroup的3個方法都返回super
從上到下
Activity dispatchTouchEvent
ViewGroup dispatchTouchEvent
ViewGroup onInterceptTouchEvent
子View dispatchTouchEvent(返回false直接回返到ViewGroup的onTouchEvent方法)
ViewGroup onTouchEvent
Activity onTouchEvent
dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN MyrelativeLayout onInterceptTouchEvent ACTION_DOWN MyImageView dispatchTouchEvent: ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP MyrelativeLayout dispatchTouchEvent: ACTION_UP MyrelativeLayout onInterceptTouchEvent ACTION_UP MyImageView dispatchTouchEvent: ACTION_UP
從上到下
Activity dispatchTouchEvent
ViewGroup dispatchTouchEvent
ViewGroup onInterceptTouchEvent
子View dispatchTouchEvent(返回true直接消費此事件)
前提 子類的dispatchTouchEvent返回super dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN MyrelativeLayout onInterceptTouchEvent ACTION_DOWN MyImageView dispatchTouchEvent: ACTION_DOWN MyImageView onTouchEvent: ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP MyrelativeLayout dispatchTouchEvent: ACTION_UP MyrelativeLayout onInterceptTouchEvent ACTION_UP MyImageView dispatchTouchEvent: ACTION_UP MyImageView onTouchEvent: ACTION_UP
從上到下
Activity dispatchTouchEvent
ViewGroup dispatchTouchEvent
ViewGroup onInterceptTouchEvent
子View dispatchTouchEvent(super)
子View的onTouchEvent返回true消費這個事件,不再向上傳遞
前提 子類的dispatchTouchEvent返回super dispatchTouchEvent: Activity ACTION_DOWN MyrelativeLayout dispatchTouchEvent: ACTION_DOWN MyrelativeLayout onInterceptTouchEvent ACTION_DOWN MyImageView dispatchTouchEvent: ACTION_DOWN MyImageView onTouchEvent: ACTION_DOWN MyrelativeLayout: onTouchEvent ACTION_DOWN onTouchEvent: Activity ACTION_DOWN dispatchTouchEvent: Activity ACTION_UP onTouchEvent: Activity ACTION_UP
從上到下
Activity dispatchTouchEvent
ViewGroup dispatchTouchEvent
ViewGroup onInterceptTouchEvent
子View dispatchTouchEvent(super)
子View的onTouchEvent返回false
ViewGroud的onTouchEvent
Acitivty的onTouchEvent
如果 return true,事件會分發給當前 View 並由 dispatchTouchEvent 方法進行消費,同時事件會停止向下傳遞;
如果 return false,事件分發分為兩種情況:
如果當前 View 獲取的事件直接來自 Activity,則會將事件返回給 Activity 的 onTouchEvent 進行消費;
如果當前 View 獲取的事件來自外層父控件,則會將事件返回給父 View 的 onTouchEvent 進行消費。
如果返回系統默認的 super.dispatchTouchEvent(ev),事件會自動的分發給當前 View 的 onInterceptTouchEvent 方法。
在外層 View 的 dispatchTouchEvent(MotionEvent ev) 方法返回系統默認的 super.dispatchTouchEvent(ev) 情況下,事件會自動的分發給當前 View 的 onInterceptTouchEvent 方法。onInterceptTouchEvent 的事件攔截邏輯如下:
如果 onInterceptTouchEvent 返回 true,則表示將事件進行攔截,並將攔截到的事件交由當前 View 的 onTouchEvent 進行處理;
如果 onInterceptTouchEvent 返回 false,則表示將事件放行,當前 View 上的事件會被傳遞到子 View 上,再由子 View 的 dispatchTouchEvent 來開始這個事件的分發;
如果 onInterceptTouchEvent 返回 super.onInterceptTouchEvent(ev),事件默認會被攔截,
如果有子View將事件傳給子View由子View的dispatchTouchEvent來處理
如果沒有子View並將攔截到的事件交由當前 View 的 onTouchEvent 進行處理。
在 dispatchTouchEvent 返回 super.dispatchTouchEvent(ev) 並且 onInterceptTouchEvent 返回 true 或返回 super.onInterceptTouchEvent(ev) 的情況下 onTouchEvent 會被調用。onTouchEvent 的事件響應邏輯如下:
如果事件傳遞到當前 View 的 onTouchEvent 方法,而該方法返回了 false,那麼這個事件會從當前 View 向上傳遞,並且都是由上層 View 的 onTouchEvent 來接收,如果傳遞到上面的 onTouchEvent 也返回 false,這個事件就會“消失”,而且接收不到下一次事件。
如果返回了 true 則會接收並消費該事件。
如果返回 super.onTouchEvent(ev) 默認處理事件的邏輯和返回 false 時相同
源碼
https://github.com/ln0491/AndroidTouchDemo
Fragment的生命周期和Activity之間的通信以及使用,fragmentactivityFragment通俗來講就是碎片,不能單獨存在,意思就是說必須依附於Act
解決Android Graphical Layout 界面效果不顯示,androidgraphical 解決Android Graphical Layout 界
手把手搭建自己的android環境,把手搭建android最近想學習安卓,不過國內實在被牆的厲害,真是萬裡安裝只被牆。安裝的過程中也出現了幾個問題。所以記錄下來,免得自己
上次介紹MediaPlayer的時候稍微介紹了SurfaceView,SurfaceView由於可