2016-02-10 66 views
1

中創建一個應用程序,因此我使用垂直viewpager,viewpager可以正常工作,但它不能平滑滾動,它有時會在滑動時粘住。這裏是我的代碼,任何人都可以幫助我。提前感謝。如何在android

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 static class VerticalPageTransformer implements PageTransformer { 
    private static float MIN_SCALE = 0.95f; 

    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 <= 0) { // [-1,0] 

      view.setAlpha(1); 
      //view.setTranslationX(1); 
      view.setScaleX(1); 
      view.setScaleY(1); 
      float yPosition = position * view.getHeight(); 
      view.setTranslationY(yPosition); 
      view.setTranslationX(-1 * view.getWidth() * position); 

     } else if (position <= 1) { // (0,1] 
      // Fade the page out. 
      view.setAlpha(1 - position); 

      view.setTranslationX(-1 * view.getWidth() * position); 

      // Scale the page down (between MIN_SCALE and 1) 
      float scaleFactor = MIN_SCALE 
        + (1 - MIN_SCALE) * (1 - Math.abs(position)); 
      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 

     } else { 
      view.setAlpha(0); 
     } 

    } 
} 

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 intercepted; 
} 

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

回答

0

是的,所有你需要做的是廣告這行來查看傳呼機類:

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

我有同樣的問題,用垂直viewpager。最後,我只需添加該屬性的解決方案:

android:clickable="false" 

viewpager適配器的項目視圖。因此,將其添加到視圖中(即imageviewtextview取決於您的佈局),其中不具有具有任何onClick功能。