2010-07-27 6 views
77

Ich habe derzeit eine Ansicht in meiner Android App und die Ansicht spielt eine Rahmenanimation. Ich möchte die Ansicht animieren, ihre Größe auf 150% zu erhöhen. Wenn ich eine Maßstabsanimation darauf anwende und die Maßstabsanimation abgeschlossen ist, möchte ich, dass die Ansicht für den Rest des Lebenszyklus der Aktivität in dieser neuen Größe bleibt. Leider ist jetzt, wenn die Scale-up-Animation abgeschlossen ist, die Ansicht wieder auf die Originalgröße zurückgesetzt. Wie kann ich erreichen, dass die neue animierte Transformation beibehalten wird?Wie kann ich eine Ansicht in Android animieren und sie in der neuen Position/Größe belassen?

Ich verwende

myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150)); 

Dank!

Antwort

143

Vergewissern Sie sich unter Attribute auf das Element Wurzel hinzufügen in Ihrer Animation xml:

android:fillAfter="true" 
android:fillEnabled="true" 
+6

Das ist die wirkliche Antwort. ** Das OP sollte dies ändern, um die angenommene Antwort zu sein. ** Danke Qlimax !! (P.S. Dies ist nicht in der "Animation" Abschnitt des Dev Guide dokumentiert, es ist nur in den Javadocs für die Animation-Klasse dokumentiert. So schlechte Dokumentation!) –

+7

wo diesen Code zu setzen? in '' oder in Animations-Tags ('translate' |' rotate' | 'scale')? – xxxxxxxxxadfas

+5

wie unten erwähnt, müssen Sie es zum Set-Parameter hinzufügen – cV2

2

BEARBEITEN: Qlimax's Antwort 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, werde ich es hier kopieren: fillAfter = true fillEnabled = true

Meine ursprüngliche Antwort (das funktioniert, aber ist leicht lächerlich im Vergleich) folgt:

Für Dinge wie nach der Animation erwartet funktionieren, zumindest nach this thread, erhalten Sie ein onAnimationEnd Handler zu schreiben, und in Dort passen Sie die "echten" Grenzen (vor der Transformation) Ihrer Ansicht manuell an das Endergebnis der Maßstabsanimation an.

+0

Hallo Walter. Ich habe das onAnimationEnd überschrieben, aber ich weiß nicht, wie man die "echten" Grenzen der Ansicht an den Maßstab der Animation anpassen soll. Ich weiß, was genau DP ich möchte, dass es endet, aber ich kann die Funktion nicht finden, "SetWidth()" oder "SetHeight()". – justinl

+1

Ich glaube, dass diese in den LayoutParams gespeichert sind. Sie sollten 'view.getLayoutParams() ausführen können. Width = newWidth; view.getLayoutParams(). height = newHeight; view.requestLayout(); '. (Der letzte Aufruf ist notwendig, um den View-Tree darüber zu informieren, dass er neu berechnet werden muss.) –

+0

oh excellent: D thanks! Das ist großartig. – justinl

1

Eigentlich scheint die Animation, die Sie verwenden, in das Android-Framework eingebettet zu sein, ich bin mir nicht sicher, ob Sie etwas darin ändern können.
Sie können jedoch Ihre eigene Animation erstellen, indem Sie the example in the documentation folgen. Und Sie müssen android: fillAfter = "true" setzen, wenn die Skalierung nach dem Ende der Animation beibehalten werden soll.

+2

scaleUp150 ist eine benutzerdefinierte Animation, die ich in XML geschrieben habe (obwohl es extrem einfach ist). Ich habe den Androiden: fillAfter = "true" in die Animation eingefügt, aber es schnappt immer noch auf die Originalgröße zurück: S – justinl

49

versuchen, die Animation von Code Konstruktion und die Eigenschaften wie diese

anim.setFillEnabled(true); 
anim.setFillAfter(true); 
+0

ist aber neues Problem zu schaffen, ich erhalte Berührungsereignis auf it.http: //stackoverflow.com/questions/4728908/android-view-with-view-gone-still-receives-ontouch-and-onclick – W00di

30

Einstellung, wenn Sie möchten, Um Ihre Animation in ein xml zu setzen, kann es diese Hilfe benötigen:

<set 
android:fillEnabled="true" 
android:fillAfter="true" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<translate 
    android:fromYDelta="0" 
    android:toYDelta="-20%p" 
    android:duration="7000" /> 

</set> 

https://stackoverflow.com/a/6519233/371749

bitte auch die andere Antwort zu schätzen wissen, half mir :) viel Glück!

1

Setzen Sie android: fillAfter = "true" in das SET-Tag - wenn Sie sie in das Animations-Tag setzen, werden sie auf die "Übergangsparameter" oder "während/während der Animationsparameter" beschränkt. Die Parameter in SET richten die gewünschte Transformation nach Abschluss der Animationen ein.

18

Heutzutage ist es sehr einfach geworden:

view.animate().x(valueX).y(valueY).setDuration(500).start(); 

(In diesem Snippet ViewPropertyAnimator verwendet worden ist).

Es ist auch möglich, mehrere andere Optionen anzuhängen.

Die Ansicht wird in der neuen Position angezeigt.

+0

Dies sollte gepostet werden als Trendthema –

Verwandte Themen