2016-04-26 4 views
0

Ich habe zwei Viewpager implementiert, einen Viewpager von android, um horizontal nach links und rechts zu wischen. und zweitens ist ein benutzerdefinierter vertikaler Ansichtspager innerhalb des Fragments, um das Bild nach oben und unten zu wischen. Ich kann vertikal wo auch immer wischen, aber ich kann Viewpager nicht horizontal wischen. horizontaler Viewpager kann nur vom Bildschirmrand gezogen werden. Wie kann man den horizontalen Viewpager horizontal verschieben?Viewpager kann nur vom Rand des Bildschirms gezogen werden

Hier ist meine benutzerdefinierte vertikale Ansichtspager.

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

Antwort

0

sollten Sie versuchen, this Link

Es die Funktion der beiden Horizontal + Vertikal ViewPager zur gleichen Zeit haben. Sie können Beispielcode von here

+0

Dank für die Antwort danken. Ich habe versucht, diese Bibliothek in meinem Projekt zu verwenden. – taufan

+0

Sie sind willkommen. Wenn diese Bibliothek funktioniert, akzeptiere und stimme ab. –

2

Aufschalten canScrollHorizontally in Ihrem VerticalViewPager herunterladen:

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