2016-12-27 18 views
0

Ich versuche ein horizontales Karussell zu implementieren, wo es maximal 3 Objekte auf dem Bildschirm gibt und das mittlere Objekt eine andere Ansicht hat.Skalieren Sie die Mitte auf ein Objekt in einem ViewPager

Ich erreichte es mit dem ViewPager durch Überschreiben der getPageWidth() Callback, aber Schwierigkeiten bei der Suche nach dem mittleren Element.

Jede Hilfe oder Anregung wäre hilfreich.

private class ViewPagerAdapter extends FragmentStatePagerAdapter { 

    public int LOOPS_COUNT = 1000; 

    private String[] str = { 
      "A", 
      "B", 
      "C", 
      "D", 
      "E", 
      "F", 
      "G", 
      "H", 
      "I", 
      "DD" 

    }; 

    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     position = position % str.length; 
     return ViewPagerCustomFragment.instance(str[position]); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     return super.instantiateItem(container, position); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     super.destroyItem(container, position, object); 
    } 

    @Override 
    public int getCount() { 
     return str.length * LOOPS_COUNT; // simulate infinite by big number of products 
    } 

    @Override 
    public float getPageWidth(int position) { 
     float f = 1.0f/3; 
     return (f); 
    } 
} 

Das ist mein Fragment-Layout ist ...

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/abc" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="center"> 


    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_centerHorizontal="true" 
     android:layout_above="@+id/lin" 
     android:text="aaaaaaa"/> 

    <LinearLayout 
     android:id="@+id/lin" 
     android:layout_width="match_parent" 
     android:layout_centerInParent="true" 
     android:layout_height="wrap_content"> 
     <View 
      android:layout_width="0dp" 
      android:layout_height="2dp" 
      android:layout_gravity="center" 
      android:layout_weight="1" 
      android:background="#000000" /> 


     <ImageView 
      android:id="@+id/imageview" 
      android:layout_width="20dp" 
      android:layout_height="20dp" 
      android:layout_gravity="center" 
      android:src="@drawable/circle" /> 


     <ImageView 
      android:id="@+id/imageview1" 
      android:layout_width="20dp" 
      android:layout_height="20dp" 
      android:layout_gravity="center" 
      android:visibility="gone" 
      android:src="@drawable/circle" 
      android:tint="#000000"/> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="2dp" 
      android:layout_gravity="center" 
      android:layout_weight="1" 
      android:background="#000000" /> 
    </LinearLayout> 


</RelativeLayout> 

Antwort

0

Vorausgesetzt, dass Sie durch drei Ansichten auf einmal sind klauen (da Sie drei von ihnen auf dem Bildschirm jederzeit haben), warum don‘ t versuchst du, den zweiten Gegenstand der drei Gegenstände auf dem Bildschirm zu bekommen?

Nehmen wir an, Sie haben A, B und C jederzeit auf dem Bildschirm. Jetzt wäre der zweite Gegenstand in diesem Moment dein mittlerer Gegenstand, d. H. B.

@Override 
public Fragment getItem(int position) { 
    position = position % str.length; 
    if (position % 3 == 0) { 
     int mid = position + 1; 
     //do what you want to do with this. return a new fragment for the middle item (say ViewPagerCustomFragment2, for example). 
     return ViewPagerCustomFragment2.instance(str[mid]); 
    } else { 
     return ViewPagerCustomFragment.instance(str[position]); 
    } 
} 
+0

Nein, nicht unbedingt, so dass im Grunde die viewpager Breite durch 3 geteilt wird und wenn ich scrollen es das erste Element nach links bewegen und bringt die richtigen dh 4. auf Position 2. Diese Lösung wird in dieser Arbeit nicht Fall. – Ritesh

+0

dann können Sie einfach die Mitte auf 1 initialisieren (int mid = 1, die anfängliche mittlere Position) und dann nach jedem Streichen nur 1 hinzufügen und die Ansicht ändern. –

+0

Was Sie auch versuchen, ist die mittlere Ansicht in eine andere Ansicht als die 2 Ansichten auf seinen beiden Seiten zu ändern, nicht wahr? –

Verwandte Themen