2014-04-17 5 views
6

klaute ich meine Anpassung Android App in den vier Richtungen zu streichen, ich bin ViewPager mit horizontal und VerticalViewPager Swipe vertikal Swipe (dies wie eine Modifikation von DirectionalViewPager als das Original ist veraltet). das Problem ist, wenn die ViewPager im VerticalViewPager enthält, die Vertikale swiping funktioniert nur, und wenn VerticalViewPager im ViewPager die Horizontal Swipe funktioniert nur enthalten, dies ist mein Code für den ersten Zustand:Wie Vertically setzen geklaut ViewPager in einem horizontal ViewPager

VerticalViewPager verticalViewPager = (VerticalViewPager) findViewById(R.id.vertical_pager); 
     verticalViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager())); 
     verticalViewPager.setPageTransformer(true, new ViewPager.PageTransformer() { 
      @Override 
      public void transformPage(View view, float position) { 
       int pageWidth = view.getWidth(); 
       int pageHeight = view.getHeight(); 

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

       } else if (position <= 1) { // [-1,1] 
        // Modify the default slide transition to shrink the page as well 
        float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 
        float vertMargin = pageHeight * (1 - scaleFactor)/2; 
        float horzMargin = pageWidth * (1 - scaleFactor)/2; 
        if (position < 0) { 
         view.setTranslationY(vertMargin - horzMargin/2); 
        } else { 
         view.setTranslationY(-vertMargin + horzMargin/2); 
        } 

        // Scale the page down (between MIN_SCALE and 1) 
        view.setScaleX(scaleFactor); 
        view.setScaleY(scaleFactor); 

        // Fade the page relative to its size. 
        view.setAlpha(MIN_ALPHA + 
          (scaleFactor - MIN_SCALE)/
            (1 - MIN_SCALE) * (1 - MIN_ALPHA)); 

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

     verticalViewPager.setCurrentItem(1); 

     TabPagerAdapter TabAdapter = new TabPagerAdapter(getSupportFragmentManager()); 
     ViewPager Tab = (ViewPager) findViewById(R.id.pager); 
     Tab.setAdapter(TabAdapter); 
     Tab.setCurrentItem(1); 

Die TabPagerAdapter Klasse:

public class TabPagerAdapter extends FragmentStatePagerAdapter { 
    public TabPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     switch (i) { 
     case 0: 
      //Fragment for Left side 
      return new AC_Left(); 
     case 1: 
      //Fragment for Center side 
      return new AC_Center(); 
     case 2: 
      //Fragment for Right side 
      return new AC_Right(); 
     } 
     return null; 

    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

AC_Left, AC_Right und AC_Center sind ähnlich fragments außer der layout zurückgegeben:

public class AC_Center extends Fragment { 
    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View ac_center_frag = inflater.inflate(R.layout.ac_center_fragment, container, false); 
      return ac_center_frag; 

    } 
} 

Und die XML Datei:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bg" > 

    <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/buttonBar" 
      android:orientation="vertical" 
      android:weightSum="1" > 

    <com.example.myapp.VerticalViewPager 
      android:id="@+id/vertical_pager" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 

      <android.support.v4.view.ViewPager 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/pager" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 

    </com.example.myapp.VerticalViewPager> 

</LinearLayout> 
</RelativeLayout> 
+0

Ich arbeite selbst daran. Wie weit zurück musst du unterstützen? – smokingoyster

+0

@btate was meinst du mit wie weit zurück muss ich unterstützen –

+0

Welche minimale os-version müssen Sie unterstützen. – smokingoyster

Antwort

4

ich eine Bibliothek für diese mit einer Beispielanwendung erstellt und setzen es auf GitHub. Grundsätzlich verwaltet es einen View-Port und aktualisiert den View-Pager bei jedem Seitenwechsel. Es gibt einen Adapter, den Sie implementieren müssen, um ihm Fragmente für jede Zeile, Spaltenindex zu geben. Es ist zugegebenermaßen ein wenig zusammengehackt, sollte aber in der Zwischenzeit funktionieren. Es gibt eine Bitmaske, die Sie einstellen können, um sie in die von Ihnen benötigten Richtungen zu bringen. Setzen Sie es auf GRID_WRAP_NONE, damit es überhaupt nicht umbrochen wird.

https://github.com/btate/BTGridPager-Android

Dies könnte nicht genau das, was Sie brauchen, aber es sollte Ihnen den Einstieg.