2013-06-11 26 views
11

因此,我有我的活動,其中有一個主ViewPager和ViewPager內每個頁面有整個內容作爲ScrollView和ScrollView裏面有另一個ViewPager。Android ViewPager與ScrollViews中的ViewViewrs

這可能聽起來很瘋狂,但基本上外層ViewPager包含新聞文章,文章很長,所以有一個ScrollView,並且在ScrollView裏面還有多個縮略圖/圖片可以滑過。

我已經嘗試了幾種不同的自定義ViewPage與不同的觸摸事件攔截,但似乎無法得到它完美。它要麼完全吸收所有的觸摸事件,以至於ScrollView的垂直滾動在該區域不起作用,要麼讓內部的滾動水平滾動會非常棘手/困難。

任何人都有完美的解決方案?

+0

你已經解決問題了嗎?我正在嘗試做你正在嘗試的事情。 – tasomaniac

+0

是的,我的解決方案如下。讓我知道你是否需要幫助! – egfconnor

+0

我已經嘗試過這種解決方案,但它給我滾動佈局內的可點擊項目的問題。當我在可點擊項目上垂直滾動時,滾動視圖不滾動。 – tasomaniac

回答

12

如果有人想知道我的解決方案:

public class CustomScrollView extends ScrollView { 
private GestureDetector mGestureDetector; 
View.OnTouchListener mGestureListener; 

public CustomScrollView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    mGestureDetector = new GestureDetector(context, new YScrollDetector()); 
    setFadingEdgeLength(0); 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    return super.onInterceptTouchEvent(ev) 
      && mGestureDetector.onTouchEvent(ev); 
} 

// Return false if we're scrolling in the x direction 
class YScrollDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, 
      float distanceX, float distanceY) { 
     if (Math.abs(distanceY) > Math.abs(distanceX)) { 
      return true; 
     } 
     return false; 
    } 
} 
} 

和外最ViewPager是:

public class NestingViewPager extends ViewPager { 

public NestingViewPager(final Context context, final AttributeSet attrs) { 
    super(context, attrs); 
} 

public NestingViewPager(final Context context) { 
    super(context); 
} 

@Override 
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
    if (v != this && v instanceof ViewPager) { 
     return true; 
    } 
    return super.canScroll(v, checkV, dx, x, y); 
} 
} 
+2

這段代碼拯救了我的生命!謝謝:) –

+0

很高興幫助你! – egfconnor

+0

嘿,我有一個滾動視圖和查看頁面裏面的問題,但verticall滾動不起作用,即使與你custon滾動? – Tony