2016-02-10 11 views
1

Я создаю одно приложение, поэтому я использовал вертикальный просмотрщик, просмотрщик работает нормально, но он не прокручивается плавно, он иногда прилипает во время салфетки. вот мой код, может кто-нибудь помочь мне. Спасибо заранее.Как сгладить вертикальный просмотрщик в андроиде

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 элемент-адаптера. Поэтому добавьте его в виде (например, imageview и textview зависит от вашего макета), который не имеет, имеет функцию onClick.

 Смежные вопросы

  • Нет связанных вопросов^_^