Chcę mieć 2-sekundową animację ImageView, która spędza 1000 ms na zanikaniu, a następnie 1000 ms na zanikaniu.
Oto, co mam do tej pory w moim konstruktorze ImageView:
Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setDuration(1000);
Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);
AnimationSet animation = new AnimationSet(true);
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);
Kiedy uruchamiam tę animację, nic się nie pojawia. Jednak kiedy usuwam jedną z animacji alfa, zachowanie działa zgodnie z oczekiwaniami.
Rzeczy, których już próbowałem:
- Każdej możliwej kombinacji
setFillBefore
,setFillAfter
isetFillEnabled
. - Dodawanie
LinearInterpolator
doAnimationSet
.
Odpowiedzi:
Zrozumiałem swój problem. Ostatecznie rozwiązanie zostało oparte na interpolatorach.
Jeśli używasz Kotlin
źródło
Wiem, że już na to odpowiedziano, ale .....
Szybki i łatwy sposób na szybkie wprowadzanie i wyłączanie z powtarzaniem samego siebie. Cieszyć się
EDYCJA : W swojej aktywności dodaj to:
źródło
alpha
zasobu, jak mogę z niego korzystać? DziękiviewToAnimate.startAnimation(AnimationUtils.loadAnimation(context, R.anim.fade_in_out)
gdzie w folderze anim pod res. Znajduje się plik fade_in_out.xml.źródło
Oto moje rozwiązanie wykorzystujące AnimatorSet, które wydaje się być nieco bardziej niezawodne niż AnimationSet.
źródło
Inna alternatywa:
Nie ma potrzeby definiowania 2 animacji dla fadeIn i fadeOut . fadeOut jest odwrotnością fadeIn .
Możesz to zrobić za pomocą Animation.REVERSE w następujący sposób:
potem onAnimationEnd :
źródło
Ponieważ wierzę w siłę XML (dla układów), jest to odpowiednik zaakceptowanej odpowiedzi , ale wyłącznie jako zasób animacji:
fillAfter
Jest dla blaknięcie pozostać po zakończeniu animacji. Jak można się domyślić,interpolator
obsługuje interpolację animacji. Możesz także użyć innych typów interpolatorów, takich jak Linear lub Overshoot.Pamiętaj, aby rozpocząć animację w swoim widoku:
źródło
Oto, czego użyłem do zanikania / wyłączania widoków, mam nadzieję, że to komuś pomoże.
źródło
AnimationSets nie wydaje się działać zgodnie z oczekiwaniami. W końcu zrezygnowałem i użyłem postDelayed () klasy Handler do sekwencjonowania animacji.
źródło
Jeśli używasz Animatora do tworzenia animacji, możesz
anim (katalog) -> fade_out.xml
W java
Innym sposobem na zanikanie animacji za pomocą samego kodu java jest
źródło
Możesz także użyć animacjiListener, czegoś takiego:
źródło
Bardzo podoba mi się rozwiązanie Witalija Zinczenki , ponieważ było krótkie.
Oto jeszcze krótsza wersja w kotlinie dla prostego zanikania
źródło