TouchImageView源码分析――请叫我代码侦探
github上有个不错得项目,https://github.com/Dreddik/AndroidTouchGallery
主要还是TouchImageView里面得源码分析,分析touch事件得传递流程
当点击这个GalleryViewPager里得TouchImageView的时候,打印出的结果为
down ==0,move==2,up ==1,cancle==3;
从打印分析可以看出,GalleryViewPager的onInerceptTouch拦截了down事件,但是执行了super的onInterceptTouch方法返回默认值false,然后就直接传递给了TouchImageView去执行down事件,在这里ViewPager和其它的ViewGroup的touch事件传递不同,因为这里的子View其实也是一个ViewGroup,也就是说,当ViewPager拦截的touch事件传递给这个Viewgroup子view的onTouchEvent事件后,即使子view的on touch事件返回的是false,也不会把touch事件传递给GalleryViewPager的ontouchevent处理。这点和一般的view group的touch事件的传递不太一样,具体我也不明白为什么。它就好像是ViewPager的直接子View的OnTouchEvent事件返回的是true一样。如下:
ViewPager里面设置的AdapterView为单个View非ViewGroup时候,touch事件传递,down后直接返回给ViewPager的TouchEvent处理,子view默认返回false;
但是当子View的onTouch事件返回的是true的话,不会直接将接下来的move的touch事件传递给ViewPager的onTouchEvent事件。而是自己消耗move事件。
ViewPager里面的onTouchEvent执行的时机是当子ViewGroup的子view,或者直接子view(这个子view的ontouchevent事件返回的是true)的touch事件为Action_cancle时才执行。
而如果是单独的一个ontouchevent事件返回的是false的非ViewGroup的子view则执行到down后就直接执行ViewPager里的onTouchEvent方法。
具体原因可以去看android系统源码
PS:可能这里分析会有很多问题,希望各位看到问题错误多批评指正,欢迎吐槽。