Więc używam tej metody do animowania view
przez nieskończony czas:
private void animateView (final View view) {
final Animation animationIn = AnimationUtils.loadAnimation(this,R.anim.fade_in);
final Animation animationOut = AnimationUtils.loadAnimation(this, R.anim.fade_out);
animationIn.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
view.startAnimation(animationOut);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
animationOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
view.startAnimation(animationIn);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
view.startAnimation(animationIn);
}
Użyłem tej metody, ponieważ wyglądało na to, że animation.setRepeatMode()
i animation.setRepeatCount()
nie działają i po krótkim wyszukiwaniu odkryłem, że są w zasadzie błędne.
Ale kiedy dzwonię myView.clearAnimation()
, wciąż się animuje. Jaki jest problem?
1 odpowiedź
Problem polega na tym, że wywołanie clearAnimation()
kończy bieżącą animację... co uruchamia Twoją metodę onAnimationEnd()
, rozpoczynając nową animację.
Stworzyłbym flagę logiczną, aby śledzić, czy animacje powinny się zapętlać, i wyłączać ją, gdy chcesz anulować animacje.
- Utwórz flagę (domyślnie true)
private boolean shouldRepeatAnimations = true;
- Przeczytaj flagę, aby określić, czy animacje powinny się zapętlać:
@Override
public void onAnimationEnd(Animation animation) {
if (shouldRepeatAnimations) {
view.startAnimation(animationIn);
}
}
- Jeśli chcesz anulować animację, wyłącz także flagę:
shouldRepeatAnimations = false;
view.clearAnimation();
Podobne pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.