Ich zeige a, DialogFragment
wenn der Benutzer auf eine Zeile in a tippt ListView
. Ich möchte die Darstellung des Dialogfelds so animieren, dass es aus der Mitte der Zeile heraus wächst. Ein ähnlicher Effekt tritt beim Öffnen eines Ordners über den Launcher auf.
Eine Idee, die ich hatte, ist eine Kombination aus TranslateAnimation
und ScaleAnimation
. Gibt es eine andere Art und Weise?
android
android-fragments
android-animation
Edward Dale
quelle
quelle
Antworten:
Als
DialogFragment
Wrapper für dieDialog
Klasse sollten Sie ein Thema für Ihre Basis festlegenDialog
, um die gewünschte Animation zu erhalten:Dann müssen Sie nur noch das Thema definieren, das Ihre gewünschte Animation enthält. Fügen Sie in styles.xml Ihr benutzerdefiniertes Thema hinzu:
Fügen Sie nun die Animationsdateien im Ordner res / anim hinzu:
(das
android:pivotY
ist der Schlüssel)anim_in.xml
anim_out.xml
Schließlich ist es hier schwierig, Ihre Animation aus der Mitte jeder Zeile heraus wachsen zu lassen. Ich nehme an, die Zeile füllt den Bildschirm horizontal aus, sodass der
android:pivotX
Wert einerseits statisch ist. Andererseits können Sie denandroid:pivotY
Wert nicht programmgesteuert ändern .Ich schlage vor, Sie definieren mehrere Animationen, von denen jede einen anderen Prozentwert für das
android:pivotY
Attribut hat (und mehrere Themen, die auf diese Animationen verweisen). Wenn der Benutzer auf die Zeile tippt, berechnen Sie die Y-Position in Prozent der Zeile auf dem Bildschirm. Wenn Sie die Position in Prozent kennen, weisen Sie Ihrem Dialogfeld ein Thema mit dem entsprechendenandroid:pivotY
Wert zu.Es ist keine perfekte Lösung, könnte aber den Trick für Sie tun. Wenn Ihnen das Ergebnis nicht gefällt, würde ich vorschlagen, das
DialogFragment
einfacheView
Wachsen von der exakten Mitte der Reihe aus zu vergessen und zu animieren .Viel Glück!
quelle
setStyle(DialogFragment.STYLE_NORMAL, R.style.MyCustomTheme)
unteronCreate(bundle)
Siehe: developer.android.com/reference/android/app/DialogFragment.htmlSchauen Sie sich diesen Code an, er funktioniert bei mir
// Animation nach oben schieben
// Dowm Animation schieben
// Stil
// Innerhalb des Dialogfragments
quelle
DialogFragment verfügt über eine öffentliche getTheme () -Methode, die Sie aus genau diesem Grund überschreiben können. Diese Lösung verwendet weniger Codezeilen:
quelle
AppTheme.NoActionBar
während das DialogFragment die Standardeinstellung verwendetAppTheme
. Die obige Methode löste mein Problem, indem sie sowohl in Fragmenten als auch in Aktivitäten ein einheitliches Thema hatte.Um einen Vollbilddialog mit Animation zu erhalten, schreiben Sie Folgendes ...
Stile:
res / anim / slide_up.xml
res / anim / slide_down.xml
Java-Code:
quelle
Verwenden Sie die Dekoransicht in onStart in Ihrem Dialogfragment
quelle
In DialogFragment heißt die benutzerdefinierte Animation onCreateDialog. 'DialogAnimation' ist ein benutzerdefinierter Animationsstil in der vorherigen Antwort.
quelle
Haben Sie sich das Android-Entwicklertraining zum Zoomen einer Ansicht angesehen ? Könnte ein guter Ausgangspunkt sein.
Sie möchten wahrscheinlich eine benutzerdefinierte Klasse erstellen, die erweitert wird
DialogFragment
, damit dies funktioniert.Schauen Sie sich auch Jake Whartons NineOldAndroids für Honeycomb Animation API-Kompatibilität bis hin zu API Level 1 an.
quelle
Wenn Sie über APIs arbeiten möchten, müssen Sie dies in Ihrem DialogFragemnt-> onStart und nicht in onCreateDialog tun
quelle
Die Lösung von Colateral hat bei mir funktioniert. Ich habe jedoch ein nerviges Problem mit der Animation festgestellt: Sie wurde nicht nur abgespielt, als mein Dialog erstellt und zerstört wurde, sondern auch, wenn die App in den Hintergrund und aus dem Hintergrund geriet (dh alle
onStart()
undonStop()
).Achten Sie zunächst auf die Unterscheidung zwischen
und
Letzterer ändert nicht nur das Attribut, sondern löst auch die Änderung aus. Nur das Ändern des Attributs allein hat keine Auswirkungen, nachdem Ihr Dialog erstellt wurde.
Hier ist meine (nicht ganz elegante) Herangehensweise an das Problem mit redundanten Animationen:
Eine andere Lösung besteht darin, alles zu
windowAnimations
entfernen und zu animierenwindow.decorView
, wie hier beschrieben . Dadurch haben Sie mehr Kontrolle über Ihre Animationen.quelle
Fügen Sie diesen Code in die Werteanimation ein
Rufen Sie styles.xml auf
Bei Java-Code: Setzen Sie Onclick
Setup auf Methode:
quelle