Подтвердить что ты не робот

Android - Как оживить переход активности при нажатии кнопки возврата по умолчанию

В моей деятельности у меня есть кнопка со следующим слушателем кликов, который отлично работает:

final ImageButton startOverButton = (ImageButton) findViewById(R.id.start_over_button);
startOverButton.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(final View v) {

        finish();//go back to the previous Activity
        overridePendingTransition(R.anim.comming_in, R.anim.comming_out);
    }
});

Он оживляет возврат к предыдущему действию так, как я хочу. Однако, когда пользователь нажимает кнопку "Назад по умолчанию Android", анимация не запускается. Мой вопрос: где я должен поместить код анимации overridePendingTransition (R.anim.comming_in, R.anim.comming_out); так что эта анимация будет срабатывать как при нажатии пользователем на мою кнопку, так и на кнопку по умолчанию Android назад?

Как наивная попытка, я попытался установить overridePendingTransition (R.anim.comming_in, R.anim.comming_out); строка кода в методе onDestroy(), но это не сработало.

Заранее благодарю вас!

4b9b3361

Ответ 1

возможно, вы можете сделать эту работу в методе onBackPressed() в активности.

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.comming_in, R.anim.comming_out);   
}

Ответ 2

В основном переопределение onBackPressed - это правильный подход, но вместо этого он должен отвечать на вызов super.onBackPressed(), а затем добавлять overridePendingTransition, чтобы мы немного соответствовали правилам наследования.

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.comming_in, R.anim.comming_out);   
}

Ответ 3

если вы используете фрагмент, вы можете выполнить следующее:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.anim_slide_in_left, R.anim.anim_slide_out_left, R.anim.anim_slide_out_right, R.anim.anim_slide_in_right);
transaction.replace(R.id.fragment_container, new YourClassFragment);
transaction.addToBackStack(null);
transaction.commit();

anim_slide_in_left

<?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android" >
  <translate
    android:duration="500"
    android:interpolator="@android:interpolator/decelerate_quint"
    android:fromXDelta="100%p"
    android:toXDelta="0%p" >
  </translate>
 </set>

anim_slide_out_left

<?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android" >
  <translate
    android:duration="500"
    android:interpolator="@android:interpolator/decelerate_quint"
    android:fromXDelta="0%p"
    android:toXDelta="-100%p" >
  </translate>
 </set>

anim_slide_out_right

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
 <translate
    android:duration="@android:integer/config_mediumAnimTime"
    android:interpolator="@android:interpolator/decelerate_quint"
    android:fromXDelta="-100%p"
    android:toXDelta="0%p" >
 </translate>
</set>

anim_slide_in_right

<?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android" >
  <translate
    android:duration="@android:integer/config_mediumAnimTime"
    android:interpolator="@android:interpolator/decelerate_quint"
    android:fromXDelta="0%p"
    android:toXDelta="100%p" >
  </translate>
 </set>

Ответ 4

Несмотря на то, что переопределение onBackPressed() является хорошим вариантом, я бы предложил переопределить метод finish(), на всякий случай, если действие закончено каким-то другим способом, например, действие навигации или любое другое действие вида, которое "уничтожает" активность:

@Override public void finish() {
   super.finish();
   overridePendingTransition(0,0);
}

Нам нужно иметь в виду, что этот метод будет запущен после нажатия кнопки "Назад", поэтому мы будем рады: -)

Обновить. Более того, переопределение onBackPressed() может испортить работу, если мы используем в нем фрагменты, потому что мы, вероятно, не хотим переопределять переходы каждый раз, когда нажата задняя часть.