Ответ 1
Я переопределяю ожидающий переход сразу после вызова finish();
В моем случае я сделал это, чтобы избежать переходов.
finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);
Порядок важен:)
Я использую overridePendingTransition для того, когда моя активность создана, и это прекрасно работает. Я вижу, что затухание отлично работает, но когда я пытаюсь анимировать финиш в своей активности, он по-прежнему выполняет по умолчанию право налево.
Сначала я попытался определить анимацию out, когда я начинаю действие следующим образом:
Intent myIntent = new Intent(a, SkdyAlert.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
a.startActivity(myIntent);
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
}
Затем я попытался сделать это, когда закончу также работу
okBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
}
}
});
Но ни один из этих подходов не предотвратит слайд "справа налево" для анимации выхода. Любые идеи о том, что я делаю неправильно?
Я переопределяю ожидающий переход сразу после вызова finish();
В моем случае я сделал это, чтобы избежать переходов.
finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);
Порядок важен:)
Я исправил эту проблему, используя такой подход:
чтобы открыть с анимацией:
Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
startActivity(newUser);
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
Чтобы закрыть анимацию:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right);
}
finish();
overridePendingTransition(0, 0);
Я бы предложил использовать метод isFinishing() для настройки анимации в onPause вместо вызова finish()
@Override
protected void onPause() {
super.onPause();
if (isFinishing()){
overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
}
}
Посмотрите на это через тему. Вы можете определить ввод анимации выхода для действий или всего приложения
Этот вопрос уже ответил, но самый эффективный способ поместить анимацию при выходе из действия - переопределить метод "finish()" связанной деятельности:
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}
Следуя ответу @schwiz, это переопределение анимации для встроенной темы Dialog, где я определил локальные анимации slide_up и slide_down. Моя активность определяет тему MyDialog, чтобы входить и выходить в них.
<style name="Animation.MyDialog" parent="android:Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/slide_up</item>
<item name="android:windowExitAnimation">@anim/slide_down</item>
</style>
<style name="Theme.MyDialog" parent="android:Theme.Dialog">
<item name="android:windowAnimationStyle">@style/Animation.MyDialog</item>
</style>
Используйте startActivityForResult для запуска вашей дочерней активности и в onActivityResult() вашего родительского действия:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_YOUR_ACTIVITY) {
overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
}
super.onActivityResult(requestCode, resultCode, arg2);
}
if (getEnterAnimation() > -1 && getExitAnimation() > -1) {
overridePendingTransition(getEnterAnimation(), getExitAnimation());
}
где эти методы возвращают анимацию из R.anim.YOUR_ANIMATION_XML
добавьте этот код в свой onCreate() перед
setContentView()
и в вашем onPause() перед
super.onPause()
Я попытался добавить этот код до/внутри этих методов, но анимация выхода никогда не работала
startActivity()
finish()
onBackPressed()