Ich habe derzeit eine Ansicht in meiner Android-App und die Ansicht spielt eine Rahmenanimation ab. Ich möchte die Ansicht animieren, um sie auf 150% zu vergrößern. Wenn ich eine Skalierungsanimation darauf anwende und die Skalierungsanimation abgeschlossen ist, möchte ich, dass der Betrachter für den Rest des Lebenszyklus der Aktivität auf dieser neuen Größe bleibt. Leider wird die Ansicht gerade nach Abschluss der Scale-up-Animation auf die ursprüngliche Größe zurückgesetzt. Wie kann ich es schaffen, die neue animierte Transformation beizubehalten?
Ich benutze
myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150));
Vielen Dank!
<set ...></set>
oder in Animations-Tags (translate
|rotate
|scale
)?fillAfter
wird darauf hingewiesen, dass nur die Ansichtspixel erhalten bleiben, während sich die tatsächliche Ansicht noch in der Ausgangsposition befindet. Sie müssenLayoutParams
Ihre Ansicht wahrscheinlich manuell in onAminationEnd (Listener) festlegen.Versuchen Sie, die Animation aus Code zu erstellen und die Eigenschaften wie folgt festzulegen
quelle
Wenn Sie Ihre Animation in eine XML-Datei einfügen möchten , ist dies möglicherweise erforderlich, um Folgendes zu unterstützen:
https://stackoverflow.com/a/6519233/371749
bitte schätze auch die andere antwort, hat mir geholfen :) viel glück!
quelle
Heutzutage ist es sehr einfach geworden:
(In diesem Snippet wurde ViewPropertyAnimator verwendet).
Es ist auch möglich, mehrere andere Optionen anzuhängen.
Die Ansicht befindet sich an der neuen Position.
quelle
BEARBEITEN: Die Antwort von Qlimax ist besser, aber da das OP nicht zurückgekehrt ist, um das Häkchen zu ändern, und ich eine akzeptierte Antwort nicht löschen kann, kopiere ich sie hier: Setzen Sie einfach fillAfter = true fillEnabled = true
Meine ursprüngliche Antwort (die funktioniert, aber im Vergleich leicht lächerlich ist) lautet wie folgt:
Damit die Dinge nach der Animation wie erwartet funktionieren , müssen Sie zumindest gemäß diesem Thread einen
onAnimationEnd
Handler schreiben und dort die "echten" (Vor-Transformations-) Grenzen Ihrer Ansicht manuell anpassen, um sie an das Endergebnis von anzupassen die Skalenanimation.quelle
view.getLayoutParams().width = newWidth; view.getLayoutParams().height = newHeight; view.requestLayout();
. (Letzterer Aufruf ist erforderlich, um den Ansichtsbaum darüber zu informieren, dass er neu berechnet werden muss.)android:fillEnabled
undandroid:fillAfter
beides wahr zu sein.Da die von Ihnen verwendete Animation in das Android-Framework eingebettet zu sein scheint, bin ich mir nicht sicher, ob Sie daran etwas ändern können.
Sie können jedoch eine eigene Animation erstellen, indem Sie dem Beispiel in der Dokumentation folgen . Und Sie müssen android: fillAfter = "true" setzen, wenn die Skalierung nach dem Ende der Animation beibehalten werden soll.
quelle
Fügen Sie android: fillAfter = "true" in das SET-Tag ein - da das Einfügen in das Animationstag sie auf die "Übergangsparameter" oder "während / während der Animationsparameter" beschränkt. Die Parameter im SET wenden die gesuchte Transformation an, nachdem die Animationen abgeschlossen sind.
quelle