UltraViewPager icon indicating copy to clipboard operation
UltraViewPager copied to clipboard

源码UltraViewPagerView中onInterceptTouchEvent方法的疑问

Open minamihoshi opened this issue 6 years ago • 4 comments

源码如下

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); 作用是什么呢?

minamihoshi avatar Jun 13 '18 08:06 minamihoshi

目的是交换横纵坐标,以实现竖向滑动的效果

MikeAfc avatar Jun 15 '18 03:06 MikeAfc

在super那行不是已经转换过了么。 @MikeAfc

minamihoshi avatar Jun 15 '18 03:06 minamihoshi

这种swap event的方法来实现竖向滑动的方法(即使按比例做了适配),虽然看起来可行,但实际上使用的时候有问题的,特别是宽高比差异大的情况下,这种感受特别严重。有时候,你在竖直方向下滑动一个距离,但它被按比例转换成横坐标的时候,转化成一个很小的值,导致viewpager认为这个距离并不应该翻页。但你实际上认为这个距离,在竖直方向上,是达到了翻页的临界点的了。 我在实际项目上遇到了这个问题。所以我把viewpager的源码复制过来,改了部分源码,才最终解决这个问题

cat9 avatar Jun 28 '18 03:06 cat9

辛苦把你改的viewpager 源码分享出来

DavikChen avatar Dec 29 '18 03:12 DavikChen