簡體   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