在项目中首页使用了android-Ultra-Pull-To-Refresh组件实现下拉刷新,首页顶部是一个轮播的ViewPage,发现手动滑动ViewPage的时候非常困难。在框架主页的issues
中也能看到这个问题,但是一直没有被解决。
在android-Ultra-Pull-To-Refresh的源码托管ReadMe的末尾发现work with ViewPager: disableWhenHorizontalMove(),翻译过来就是和ViewPager一起使用,但是我们调用了这个方法后发现然并卵,那么问题在哪里呢?
于是从PtrFramLayout源码的dispatchTouchEvent开始看源码,找到如下代码:
if (mDisableWhenHorizontalMove && !mPreventForHorizontal && (Math.abs(offsetX) > mPagingTouchSlop && Math.abs(offsetX) > Math.abs(offsetY))) {
if (mPtrIndicator.isInStartPosition()) {
mPreventForHorizontal = true;
}
}
我们既然要禁用横向滑动的拦截,那么判断操作为横向并且要禁用横向拦截时给mPreventForHorizontal
赋值为true
即可,并不需要判断滑动距离。
所以把Math.abs(offsetX) > mPagingTouchSlop这句代码删掉即可,同时mPagingTouchSlop这个变量没什么用了,删掉即可。