资料参考http://blog.youkuaiyun.com/u012964944/article/details/51065133,谢谢大神提供灵感。
通过阅读源码发现,ViewPager.setPageTransformer()方法可以设置切换动画,但是如果ViewPager的子页中要处理触摸事件,如浏览图片时对图片放大缩小,FragmentStateAdpter中要处理item的点击事件,ViewPager切换子页后,不能处理触摸事件,或者触摸事件只有在切换后才响应,似乎子页里面的变的不可点击。尝试了很多中Google上的方法,包括修改setPageTransformer仍不能解决问题。
其实这个是android4.1+版本上的bug,在调用了setPageTransformer()方法后,切换子页后,当前最上面的View并不是眼睛所看的,而是另一个隐藏的子页,该隐藏的子页消费了触摸事件。尝试了把当前子页“放到最上面”,view.bringToFornt(),甚至把其他看不见的子页都设置为隐藏,otherView.setVisibility(View.GONE),当前子页仍然不能处理触摸事件。
最后查看了viewPager的源码,发现执行切换动画的代码在onPageScrolled()方法内:
- if(this.mPageTransformer != null) {
- scrollX = this.getScrollX();
- childCount = this.getChildCount();
- for(i = 0; i < childCount; ++i) {
- View var15 = this.getChildAt(i);
- ViewPager.LayoutParams var16 = (ViewPager.LayoutParams)var15.getLayoutParams();
- if(!var16.isDecor) {