2016-02-10 26 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功能。