繁体   English   中英

Android - ViewPager滚动重置

[英]Android - ViewPager scrolling resets

我在我的应用程序中使用ViewPager ,其中包含水平布局的图像以实现Paginated画廊。

当我单独测试视图时,即作为活动的主视图时,它工作正常。 但是,当我将其作为另一个布局的一部分包含在内时,滚动(或轻弹)会变得怪异。 如果在滑动的中途看起来似乎重置到原来的位置(到目前为止,我真正快速的电影是我唯一能够工作的东西)。

任何想法可能是什么问题?

如果它具有任何相关性,则视图会从XML中膨胀并添加到PagerAdapter继承的类中。

是的,默认情况下, ViewPager和其他滚动项目不能很好地协同工作。 当我必须做这些事情时,我通常ViewPager子类ViewPager以创建能够滚动的子项。 然后在我的onInterceptTouchEvent()我检查命中矩形是否在该子项内并且不拦截触摸事件,以便孩子对它进行重击。 像这样的东西:

/**
 * Override to not intercept touch events within our scroller if it exists.
 */
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if(scrollerId != 0) {
        View scroller = findViewById(scrollerId);
        if(scroller != null) {
            Rect rect = new Rect();
            scroller.getHitRect(rect);
            if(rect.contains((int)ev.getX(), (int)ev.getY())) {
                return false;
            }
        }
    }
    return super.onInterceptTouchEvent(ev);
}

然后你需要的是一种设置scrollerId (一种简单的公共方法)的方法。

另请注意,如果您使用ScrollViewViewPager 子项进行垂直滚动元素, ViewPager需要采用不同的方向。 有一个ScrollView的子类,可以检测垂直滚动方向和水平滚动的ViewPager以便ViewPager选择它。

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDistance = yDistance = 0f;
            lastX = ev.getX();
            lastY = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            final float curX = ev.getX();
            final float curY = ev.getY();
            xDistance += Math.abs(curX - lastX);
            yDistance += Math.abs(curY - lastY);
            lastX = curX;
            lastY = curY;
            if (xDistance > yDistance)
                return false;
    }

    return super.onInterceptTouchEvent(ev);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM