Установите прослушиватель анимации на анимацию активности

Я использую метод overridePendingTransition для выполнения пользовательских анимаций действий.

Я хотел бы знать, когда заканчивается анимация (обратный вызов/прослушиватель).

Есть ли какой-либо прямой способ добиться этого, если нет, пожалуйста, предложите мне какую-нибудь работу.


person akc    schedule 02.08.2010    source источник


Ответы (4)


overridePendingTransition не имеет слушателя. Как я уже писал в предыдущем посте, вы скорее захотите использовать обычную анимацию вместо overridePendingTransition (это только для Android 2.0 и выше).

Вы можете получить похожий эффект, а также можете делать более интересные вещи с обычной анимацией. Мой предыдущий пост здесь: Загружайте XML медленно

person Curtain    schedule 02.08.2010

Я использую этот метод для запуска любой анимации (resID анимации XML). Если значение nextPuzzleOnEnd равно true, метод nextPuzzle вызывается после завершения анимации.

Этот метод является частью моих приложений-головоломок, и я использую его для отображения любой анимации успеха, а затем (после завершения анимации) продолжаю со следующей головоломкой.

 /*
 * start animation (any view)
 */
 private void startAnimation(View v, int resId, Boolean nextPuzzleOnEnd){
    Animation anim;

    if(v!=null){    // can be null, after change of orientation
            anim = AnimationUtils.loadAnimation(this.getContext(),resId);
            anim.setFillAfter(false);
            v.setAnimation(anim);
            if( nextPuzzleOnEnd ){
                anim.setAnimationListener(new AnimationListener() {
                    public void onAnimationStart(Animation anim)
                    {
                    };
                    public void onAnimationRepeat(Animation anim)
                    {
                    };
                    public void onAnimationEnd(Animation anim)
                    {
                        nextPuzzle();
                    };
                });                     
            }
            v.startAnimation(anim);                 
    }
  }
person Michael Biermann    schedule 27.04.2011

После безуспешного поиска Google по этому вопросу я нашел решение, выполнив все методы переопределения.

Итак, что я сделал, так это переопределил этот метод в действии, которое выходит на экран:

Требуется API уровня 21

@Override
public void onEnterAnimationComplete() {
        super.onEnterAnimationComplete();
}
person Hamburg is nice    schedule 14.05.2017

Решение @Hambug хорошее. Но есть проблема. onEnterAnimationComplete будет работать с Lollipop и выше API (21).

@Override
public void onEnterAnimationComplete() {
    super.onEnterAnimationComplete();
    //write code here.
 }

какой бы код вы ни написали в приведенном выше методе, он не будет выполняться на устройствах prelolipop. Поэтому вы должны поставить проверку версии и написать ее в соответствии с вашими потребностями, например. в onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
        //write code here.
    }
person Nauman Ash    schedule 11.09.2018