2012-05-13 2 views
6

Ich verwende eine ViewPager mit einer PageAdapter (aus dem Kompatibilitäts-Pack v4), um zwischen einer horizontalen Liste von Feldern zu wischen. Das Problem ist, dass meine zweite Box von der ersten Seite ist die erste Box auf der zweiten Seite (visuell und konzeptionell). Etwas wie folgt aus:Swipe halbe Seite in einem ViewPager (aus Kompatibilitäts-Paket)

enter image description here

So wie ich jetzt tue es funktioniert. Dies wird jedoch etwas komisch, da in der Mitte des Streichens eine Situation auftritt, in der die gleiche Box zweimal erscheint (wie im Bild gezeigt).

Es gibt eine Möglichkeit, nur "halbe" Seite zu wischen?

EDIT:

Die Boxen sind eine Abstraktion. In der Tat ist jede Box eine ListView und ich erstelle verschiedene Seiten nur den Adapter von jedem ListView ändern.

Antwort

26
  1. pro Seite ein Fragment erstellen
  2. Aufschalten getPageWidth() in Pageadapter mehr angezeigt werden als eine Seite

Code:

@Override 
public float getPageWidth(int position) { 
    float nbPages = 2; // You could display partial pages using a float value 
    return (1/nbPages); 
} 
+0

Dies sollte die akzeptierte Antwort sein! Danke vielmals! –

+0

Geändert, Entschuldigung für die "Verzögerung" :) –

+0

perfekt! funktioniert gut für mich. Der Standardwert für getPageWidth ist 1f (d. h. 100% des Bildschirmbereichs). Sie können also '1/(no_of pages_per_screen_you_want)' setzen –

2

Ja, verwenden Sie die Kinderbreite als halbe Seite. Daher streicht das Wischen, das das nächste Kind anruft, die Hälfte der Seite. Viel Glück!

Bearbeiten: Überprüft Ihre Skizze erneut, versuchen Sie, 1., 2., 3. ... als verschiedene Kinder zu implementieren. (Ich sage voraus, die meisten der Lösung, während es als Galerie reagieren vorausgesetzt) ​​

+0

Die Boxen sind eine Vereinfachung. Eigentlich ist jede Box eine 'ListView' und jede" Box "hat einen Adapter. Wie auch immer, wie kann ich die Kindbreite als halbe Seite einstellen? –

+0

@TiagoAlmeida. Es stellt sich heraus, dass die Kinder von ViewPager immer die inneren Grenzen des ViewPagers füllen. Also löste ich das Problem mit einem kleinen Trick. Hier ist der Quellcode https://github.com/MonkeyPerformingCodingAction/ViewPagerMultipleChildTrick –

+0

Bereits Ihren Code gesehen. Vielen Dank. Ist aber irgendwie buggy: p (Sie können nur eine Seite wischen, irgendwie schwierig, vielleicht habe ich mein Problem nicht richtig erklärt?). Ich möchte in der Lage sein zu swype wie ich jetzt bin, aber ich möchte etwas wie eine Überlappung der 2 Seiten, wenn ich wische. So wie du es gemacht hast, hast du 2 Zonen, auf die du wischen kannst. Fühlt sich komisch an. –

Verwandte Themen