Android Parallax Scrolling

Rainbow

Bekanntes Mitglied
Hallo zusammen,

ich würde gerne in meine App einen parallaktischen Slider einbauen. Das heißt, ich habe om Vollbildmodus eine ImageView. Dann swipe ich vertikal oder horizontal und wärenddesse "decke" ich eine andere ImageView auf und nach 50% beispielsweise kommt eine TextView reingescrollt.

Wie lässt sich so etwas realisieren? Beispiele dazu habe ich leider nicht gefunden.

Liebe Grüße,
Rainbow
 

schlingel

Gesperrter Benutzer
Könntest du kurz mit einem Story-Board skizzieren was da auf dem Bildschirm passieren soll.

Ich verstehe nicht so wirklich wie das aussehen soll.
 

Rainbow

Bekanntes Mitglied
Ich habe 3 Ebenen.

Sagen wir ich habe eine grüne Fläche, eine rote Fläche und etwas Text.
Die grüne Fläche liegt ganz unten, die rote überdeckt diese. Die Schrift sieht man am Anfang ebenfalls nicht.
Ich habe eine Art ScrollView, in der ich von vertikal swipen möchte. Bei der Geste von unten nach oben möchte ich die rote Fläche nach oben ziehen und die grüne kommt dann zum Vorschein. Wenn ich cirka 50% der grünen Fläche sichtbar gemacht habe soll von unten der Text reinfliegen.

Das soll dann eine parallaxe Bildergalerie mit Überschriften darstellen.

Der Unterschied zu einem einfachen vertikalen PageViewer ist, dass wenn ich swipe ich nicht das Bild so wie es ist nach oben ziehe sondern eben das Bild quasi schon da ist und ich nur das wegziehe was darüber liegt, ich also nicht den Kopf des Bildes sehe, sondern den Boden.

Die Layoutdatei stelle ich mir so vor:
[XML]<?xml version="1.0" encoding="utf-8"?>
<de.test.parallaxscroll.ParallaxScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadingEdge="none"
android:scrollbarStyle="insideOverlay"
android:scrollbars="none" >

<FrameLayout
android:id="@+id/layer_content"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:src="@drawable/article_10_img1" />

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:src="@drawable/article_10_img2" />

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:text="Hallo Welt" />
</FrameLayout>

</de.test.parallaxscroll.ParallaxScrollView>[/XML]
 
Zuletzt bearbeitet:

schlingel

Gesperrter Benutzer
Ja, das sicher. Das einzige was sich anbietet sind die fertigen Animationen. Allerdings hatte ich keine Zeit dir das schön zusammenzuschreiben.
 

Rainbow

Bekanntes Mitglied
An Animationen habe ich auch schon gedacht. Das man da dann fade_in Animationen und so weiter nutzt. Mein Problem ist nur, wenn ich sagen wir mein Layout horizontal verschieben möchte. Quasi ein Drag & Drop. Dann muss ich ja eine Animation einbauen, dass das Layout beim loslassen allein "weiterfährt". Heißt, wenn ich mein Layout weniger als die Hälfte verschoben habe muss es zurück an den Anfang, sonst eben ans Ende.
Für das Ende kenne ich keine passende Animation. das layout soll ja nicht komplett von links reingefahren kommen sondern nur bis ans Ende verschoben werden.
 

Rainbow

Bekanntes Mitglied
Das Animationsproblem ist gelöst....ich bin mir jedoch nicht sicher, wie die Performance aussieht, wenn ich wirklich einmal Bilder hinzufüge oder gar Videos.
 

schlingel

Gesperrter Benutzer
Ausprobieren. Manche Dinge gehen ziemlich rasant, andere wieder überraschend lahm.

Wäre nett von dir, wenn du zumindest skizzierst wie du das Problem gelöst hast, damit das andere als Anlaufpunkt nehmen können. (z.B. ich =D)
 

Rainbow

Bekanntes Mitglied
So..ich habe jetzt ein FrameLayout per Code aufgebaut. In dem FrameLayout befinden sich übereinanderliegende LinearLayouts. Das oberste mit leftMargin 0, das darunter um 25% der Fensterbreite nach rechts verschoben und so weiter.
Das FrameLayout bekommt einen View.OnTouchListener.
Bei Action.Move verschiebe ich das oben liegende LinearLayout so, wie das TouchEvent ist. Quasi Drag&Drop in dem ich den leftMargin des Layouts verändere. Sobald ich loslasse, also Action.Up fährt das Layout per Fenster raus und das darunterliegende Layout kommt per Animation reingeflogen. Der Text ebenfalls.
Dann setz ich das nun in den Vordergrund gerückte Fenster an oberster Stelle (bringToFront()) und fertig.

An sich arbeite ich also nur mit Animationen und der Veränderung der Margins. Was mir allerdings noch fehlt ist, dass ich beim Drag schon die Layouts verschiebe und nicht erst beim loslassen...allerdings geht das dann nicht mit Animationen und ich wüsste nicht wie man die Geschwindigkeit von verschiedenen setMargins beeinflussen könnte.

Weiterhin habe ich das Problem, das das "Drag" (setMargin) bei älteren Versionen (2.3.6) nicht zu greifen scheint und ich brauche schon eine Kompatibilität ab 2.3 ...unter 4.0.4 und 4.1.1 läufts ohne Probleme.
Weiß da jemand mehr?
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben