Obecnie mam widok w mojej aplikacji na Androida, a widok odtwarza animację klatki. Chcę animować widok, aby zwiększyć jego rozmiar do 150%. Kiedy zastosuję do niego animację skali i animacja skali zostanie zakończona, chcę, aby widz pozostał w tym nowym rozmiarze do końca cyklu życia działania. Niestety teraz, gdy animacja skalowania w górę jest zakończona, widok wraca do pierwotnego rozmiaru. Jak mogę to zrobić, aby zachować nową animowaną transformację?
używam
myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150));
Dzięki!
<set ...></set>
czy w tagach animacji (translate
|rotate
|scale
)?fillAfter
tylko zatrzyma piksele widoku, podczas gdy rzeczywisty widok będzie nadal w pozycji początkowej. Musisz ręcznie ustawićLayoutParams
swój widok prawdopodobnie w onAminationEnd (listener).spróbuj skonstruować animację z kodu i ustawić właściwości w ten sposób
anim.setFillEnabled(true); anim.setFillAfter(true);
źródło
jeśli chcesz umieścić swoją animację w formacie XML , może to pomóc:
<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
proszę również docenić drugą odpowiedź, pomogli mi :) powodzenia!
źródło
W dzisiejszych czasach stało się to bardzo łatwe:
view.animate().x(valueX).y(valueY).setDuration(500).start();
(W tym fragmencie użyto ViewPropertyAnimator).
Istnieje również możliwość dołączenia wielu innych opcji.
Widok zostanie umieszczony w nowej pozycji.
źródło
EDYCJA: odpowiedź Qlimax jest lepsza, ale ponieważ OP nie wrócił, aby zmienić znacznik wyboru i nie mogę usunąć zaakceptowanej odpowiedzi, skopiuję ją tutaj: po prostu ustaw fillAfter = true fillEnabled = true
Moja pierwotna odpowiedź (która działa, ale w porównaniu jest nieco śmieszna) jest następująca:
Aby wszystko działało zgodnie z oczekiwaniami po animacji, przynajmniej zgodnie z tym wątkiem , będziesz musiał napisać
onAnimationEnd
procedurę obsługi i tam ręcznie dostosować "rzeczywiste" (przed transformacją) granice widoku, aby pasowały do końcowego wyniku animacja skali.źródło
view.getLayoutParams().width = newWidth; view.getLayoutParams().height = newHeight; view.requestLayout();
. (To drugie wezwanie jest konieczne, aby poinformować drzewo widoków, że należy je ponownie obliczyć.)android:fillEnabled
iandroid:fillAfter
oba muszą być prawdziwe.Właściwie, ponieważ animacja, której używasz, wydaje się być osadzona w strukturze Androida, nie jestem pewien, czy możesz w niej cokolwiek zmienić.
Możesz jednak utworzyć własną animację, postępując zgodnie z przykładem w dokumentacji . Będziesz musiał dodać android: fillAfter = "true", jeśli chcesz, aby skalowanie zostało zachowane po zakończeniu animacji.
źródło
Umieść android: fillAfter = "true" w tagu SET - ponieważ umieszczenie ich w tagu animacji ogranicza je do "parametrów przejścia" lub "podczas / podczas animowania parametrów". Parametry w zestawie SET zastosują transformację, której szukasz, po zakończeniu animacji.
źródło