TouchImageView源码分析

本文深入分析了TouchImageView中touch事件的传递流程,探讨了GalleryViewPager如何拦截touch事件,并详细解释了不同情况下touch事件的处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:可能这里分析会有很多问题,希望各位看到问题错误多批评指正,欢迎吐槽。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值