TouchImageView源碼分析――請叫我代碼偵探
github上有個不錯得項目,https://github.com/Dreddik/AndroidTouchGallery
主要還是TouchImageView里面得源碼分析,分析touch事件得傳遞流程
當(dāng)點擊這個GalleryViewPager里得TouchImageView的時候,打印出的結(jié)果為
down ==0,move==2,up ==1,cancle==3;
從打印分析可以看出,GalleryViewPager的onInerceptTouch攔截了down事件,但是執(zhí)行了super的onInterceptTouch方法返回默認(rèn)值false,然后就直接傳遞給了TouchImageView去執(zhí)行down事件,在這里ViewPager和其它的ViewGroup的touch事件傳遞不同,因為這里的子View其實也是一個ViewGroup,也就是說,當(dāng)ViewPager攔截的touch事件傳遞給這個Viewgroup子view的onTouchEvent事件后,即使子view的on touch事件返回的是false,也不會把touch事件傳遞給GalleryViewPager的ontouchevent處理。這點和一般的view group的touch事件的傳遞不太一樣,具體我也不明白為什么。它就好像是ViewPager的直接子View的OnTouchEvent事件返回的是true一樣。如下:
ViewPager里面設(shè)置的AdapterView為單個View非ViewGroup時候,touch事件傳遞,down后直接返回給ViewPager的TouchEvent處理,子view默認(rèn)返回false;
但是當(dāng)子View的onTouch事件返回的是true的話,不會直接將接下來的move的touch事件傳遞給ViewPager的onTouchEvent事件。而是自己消耗move事件。
ViewPager里面的onTouchEvent執(zhí)行的時機是當(dāng)子ViewGroup的子view,或者直接子view(這個子view的ontouchevent事件返回的是true)的touch事件為Action_cancle時才執(zhí)行。
而如果是單獨的一個ontouchevent事件返回的是false的非ViewGroup的子view則執(zhí)行到down后就直接執(zhí)行ViewPager里的onTouchEvent方法。
具體原因可以去看android系統(tǒng)源碼
PS:可能這里分析會有很多問題,希望各位看到問題錯誤多批評指正,歡迎吐槽。