闲来无事,用PhtoView做一个跟QQ空间一样的图片查看器。接下来说说在途中遇到的坑!
先看看效果图吧,跟QQ差不多
废话不多说,直接上代码干:
PhotoView源码地址:https://github.com/chrisbanes/PhotoView
引入PhotoView,gradle地址为:compile 'com.github.chrisbanes:PhotoView:1.2.6'
主要介绍Viewpager中的PhotoView的坑,在使用PhotoView时发现setOnLongClickListener还有 setOnDoubleTapListener......等回调接口,就是没发现单击事件的回调接口,算了想着自己自定义MyPhotoView继承PhotoView,然后直线setOnClickListener接口走自己的回调......一切都想得那么完美,但现实很残酷,点击事件完全没效果,想想应该是事件应该在PhotoView中已经消耗了,这条路是走不通了。第二条路,反正就是点击大图关闭嘛,就从最外层布局LinearLayout入手,把单击事件给父布局消耗,结果不尽人意,点PhotoView以外的区域可以实现点击事件,想都不用想,PhotoView将事件拦截了或准则请求父布局不拦截事件
parent.requestDisallowInterceptTouchEvent(true);(关键代码,请求父布局放行)
结果虽然能大致呈现出来了,但是有强迫症的我不会让我的东西有残缺的,直接看源码,按道理来说,这么优秀的作者不应该会犯不处理点击事件的小错误吧。从PhotoView入手,到PhotoViewAttacher,果不其然在PhotoViewAttacher中我发现了setOnClickListener,直接搜索到点击事件的位置,发现作者把单击事件放到setOnDoubleTapListener中去了。
问题发现了,解决起来就简单了,直接在ViewPager适配器中添加双加事件就好了,注意在添加单击事件的时候,也需要重写双击事件,不然PhotoView本身的双加放大也失效了。事件代码如下
好了,采坑到此结束,附上Demo地址:Demo
如有大佬觉得有问题欢迎issue,如果觉得对大家有用的话,不妨给个Star或Fork,笔者先谢过了!