UltraViewPager
UltraViewPager copied to clipboard
源码UltraViewPagerView中onInterceptTouchEvent方法的疑问
源码如下
private MotionEvent swapTouchEvent(MotionEvent event) { float width = getWidth(); float height = getHeight();
float swappedX = (event.getY() / height) * width;
float swappedY = (event.getX() / width) * height;
event.setLocation(swappedX, swappedY);
return event;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (scrollMode == UltraViewPager.ScrollMode.VERTICAL) {
boolean intercept = super.onInterceptTouchEvent(swapTouchEvent(ev));
//If not intercept, touch event should not be swapped.
swapTouchEvent(ev);
return intercept;
}
return super.onInterceptTouchEvent(ev);
}
onInterceptTouchEvent方法中 boolean intercept = super.onInterceptTouchEvent(swapTouchEvent(ev)); 已将坐标转换后的ev传入父类方法判断是否拦截 下一行中调用的swapTouchEvent(ev); 作用是什么呢?
目的是交换横纵坐标,以实现竖向滑动的效果
在super那行不是已经转换过了么。 @MikeAfc
这种swap event的方法来实现竖向滑动的方法(即使按比例做了适配),虽然看起来可行,但实际上使用的时候有问题的,特别是宽高比差异大的情况下,这种感受特别严重。有时候,你在竖直方向下滑动一个距离,但它被按比例转换成横坐标的时候,转化成一个很小的值,导致viewpager认为这个距离并不应该翻页。但你实际上认为这个距离,在竖直方向上,是达到了翻页的临界点的了。 我在实际项目上遇到了这个问题。所以我把viewpager的源码复制过来,改了部分源码,才最终解决这个问题
辛苦把你改的viewpager 源码分享出来