2015-12-09 3 views
1

Ниже приведен код, относящийся к моей деятельности, где у меня есть кнопка (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! 
    } 
}); 
// [...] 

что я здесь делаю неправильно ?? Как можно остановить эту анимацию?

+0

см '' cancel' и методы end' – pskink

ответ

0

Прежде всего, вы можете проверить this link для получения лучших примеров.

Я также предлагаю вам не останавливать анимацию (если вы не реализуете ее правильно с расширенным представлением, обработчики с postDelay и нитями спит. Если какая-то логика выполнена, просто удалите вид/откройте другой экран, особенно если он progressView, он не должен быть показан, но не вращается, просто удалите его видимость

удачи

Смежные вопросы