Проблема с приостановкой и воспроизведением анимации Android

#android #animation #playback

#Android #Анимация #воспроизведение

Вопрос:

Я создал анимацию, используя следующий код.

 private AnimationSet rootSet = new AnimationSet(true);
private int xstart=258;
private int ystart=146;
for(; k<points.length; k  ) {
  if(k==1) {
    x1 = headX(xstart);
    y1 = headY(ystart);
    _animTime = 10;
  } else {

    x1 = headX(points[k-1][0]);
    y1 = headY(points[k-1][1]);
  }
  translate = new TranslateAnimation((float)x1, (float)x2, (float)y1, (float)y2);
  translate.setDuration(_animTime); 
  translate.setFillAfter(true);
  translate.setInterpolator(new AccelerateDecelerateInterpolator());
  totalAnimTime  =  _animTime;
  translate.setStartOffset(totalAnimTime);
  rootSet.addAnimation(translate);
  rootSet.setFillAfter(true);   
}

imv1.startAnimation(rootSet);
  

Все работает нормально. Теперь я должен добавить функцию паузы и воспроизведения для этой анимации. Как я могу это сделать?

Ответ №1:

Поскольку вы предоставили больше информации о том, что вы явно хотели использовать AnimationSet , я нашел другое решение, которое должно сработать для вас.

Пример кода:

Класс, который расширяется AnimationSet по мере необходимости, чтобы отменить AnimationSet :

 public class CustomAnimationSet extends AnimationSet {

     private AnimationListener mCustomAnimationSetListener;

     public CustomAnimationSet(boolean interpolator) {
          super(interpolator);
     }

     public CustomAnimationSet(Context context, AttributeSet attrs) {
          super(context, attrs);
     }

     @Override
     public void setAnimationListener(AnimationListener listener) {
          super.setAnimationListener(listener);
          mCustomAnimationSetListener = listener;
     }

     /**
      * Your cancel method....
      */
     public void cancel() {
          // Make sure you're cancelling an ongoing AnimationSet.
          if(hasStarted() amp;amp; !hasEnded()) {
               if(mCustomAnimationSetListener != null) {
                    mCustomAnimationSetListener.onAnimationEnd(this);
               }
          }

          // Reset the AnimationSet's start time.
          setStartTime(Float.MIN_VALUE);
     }

}
  

В вашем Activity классе:

 private CustomAnimationSet mAnimationSet;

// Init stuff.

@Override
public void onClick(View v) {
    switch(v.getId()) {
        case R.id.onPlayButton:
            // Might wanna add Animations before starting next time?
            mAnimationSet.start();
        case R.id.onPauseButton:
            mAnimationSet.cancel();
            mAnimationSet.reset();
    }
}
  

Это всего лишь пример. На данный момент у меня нет возможности протестировать это самостоятельно, это было просто написано для примера.

Комментарии:

1. Если анимация будет отменена, будет ли она по-прежнему использовать setFillAfter (true)?

2. @Pennypacker: Я никогда не пробовал практически, но я считаю, что вызов a cancel() отменит все, что Animation было определено

3. Я должен анимировать Animatioset, а не TranslateAnimation. В наборе анимации нет метода cancel ().

4. @dalandroid: Извините, я вас неправильно понял. Я отредактировал свой ответ.