Ниже приведен код, относящийся к моей деятельности, где у меня есть кнопка (someButton), которая при щелчке запускает анимацию на другое представление, а точнее, представление progressbar, на том же активность:Как остановить анимацию (из ObjectAnimator)
// [...]
someButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
ObjectAnimator animation = ObjectAnimator.ofInt(progressView, "progress", 0, 2000);
animation.setDuration(2000);
animation.setInterpolator(new DecelerateInterpolator());
animation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// some code to execute when the animation ends
}
});
animation.start();
}
});
// [...]
Теперь, в какой-то момент я, возможно, потребуется, чтобы остановить анимацию этой точки зрения прогресс бара (когда пользователь нажимает кнопку остановки, например). Я позвонил progressView.clearAnimation()
, чтобы остановить анимацию, но не добился успеха. Я также заметил, что progressView.getAnimation() возвращает null ... И когда я делаю ObjectAnimator animation
переменной final и перемещаю ее за пределы someButton.setOnClickListener
, так что я могу получить к ней доступ позже, чтобы остановить анимацию, я получаю следующее исключение, когда я нажимаю на someButton (так же, как то, что происходит here):
java.lang.NullPointerException
at android.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:505)
at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:487)
at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:517)
at android.animation.ValueAnimator.start(ValueAnimator.java:936)
at android.animation.ValueAnimator.start(ValueAnimator.java:946)
at android.animation.ObjectAnimator.start(ObjectAnimator.java:465)
at android.animation.AnimatorSet$1.onAnimationEnd(AnimatorSet.java:579)
at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1056)
at android.animation.ValueAnimator.access$400(ValueAnimator.java:50)
[...]
И код, который проливает, что исключение:
// [...]
final ObjectAnimator animation = ObjectAnimator.ofInt(progressView, "progress", 0, 2000);
animation.setDuration(2000);
animation.setInterpolator(new DecelerateInterpolator());
animation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// some code to execute when the animation ends
}
});
someButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
animation.start();// NPE occurs here!
}
});
// [...]
что я здесь делаю неправильно ?? Как можно остановить эту анимацию?
см '' cancel' и методы end' – pskink