2016-04-26 137 views
0

我已經實現了兩個視圖頁面,android中的一個viewpager用於水平左右劃分片段。其次是片段內的自定義垂直視圖,以便上下掃描圖像。我可以垂直滑動任何地方,但我無法水平滑動viewpager。水平viewpager只能從屏幕邊緣刷卡。如何讓水平viewpager可以在任何地方水平滑動?Viewpager只能從屏幕邊緣滑動

這裏是我的自定義垂直viewpager。

public class VerticalViewPager extends ViewPager { 
public VerticalViewPager(Context context) { 
    super(context); 
    init(); 
} 

public VerticalViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

private void init() { 
    // The majority of the magic happens here 
    setPageTransformer(true, new VerticalPageTransformer()); 
    // The easiest way to get rid of the overscroll drawing that happens on the left and right 
    setOverScrollMode(OVER_SCROLL_NEVER); 
} 

private class VerticalPageTransformer implements ViewPager.PageTransformer { 

    @Override 
    public void transformPage(View view, float position) { 

     if (position < -1) { // [-Infinity,-1) 
      // This page is way off-screen to the left. 
      view.setAlpha(0); 

     } else if (position <= 1) { // [-1,1] 
      view.setAlpha(1); 

      // Counteract the default slide transition 
      view.setTranslationX(view.getWidth() * -position); 

      //set Y position to swipe in from top 
      float yPosition = position * view.getHeight(); 
      view.setTranslationY(yPosition); 

     } else { // (1,+Infinity] 
      // This page is way off-screen to the right. 
      view.setAlpha(0); 
     } 
    } 
} 

/** 
* Swaps the X and Y coordinates of your touch event. 
*/ 
private MotionEvent swapXY(MotionEvent ev) { 
    float width = getWidth(); 
    float height = getHeight(); 

    float newX = (ev.getY()/height) * width; 
    float newY = (ev.getX()/width) * height; 

    ev.setLocation(newX, newY); 

    return ev; 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev){ 
    boolean intercepted = super.onInterceptTouchEvent(swapXY(ev)); 
    swapXY(ev); // return touch coordinates to original reference frame for any child views 
    return intercepted; 
} 

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    return super.onTouchEvent(swapXY(ev)); 
}} 

回答

0

你應該嘗試this Link

它同時具有水平垂直+ ViewPager的功能在同一時間。您可以從here

+0

謝謝你的答案。我一直在嘗試在我的項目中使用這個庫。 – taufan

+0

歡迎你。如果這個圖書館工作,請接受並投票回答。 –

2

覆蓋canScrollHorizo​​ntally在VerticalViewPager下載示例代碼:

@Override 
public boolean canScrollHorizontally(int direction) { 
    return false; 
}