Как я могу добавить анимацию в конец действия () - PullRequest
87 голосов
/ 02 декабря 2010

Я использую overridePendingTransition, когда моя деятельность создается, и это работает нормально, я вижу, что плавное увеличение отлично работает, но когда я пытаюсь анимировать окончание действия, оно все еще выполняет слайд по умолчанию справа налево.

Сначала я попытался определить анимацию при запуске упражнения следующим образом:

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);
            }
        }
    });

Но ни один из этих подходов не помешает слайду «справа налево» для анимации выхода.Есть идеи, что я делаю не так?

Ответы [ 9 ]

212 голосов
/ 05 января 2012

Я отменяю ожидающий переход сразу после вызова finish ();

В моем случае я сделал это, чтобы избежать переходов.

finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);

Заказ важен:)

21 голосов
/ 20 мая 2015

Я бы предложил использовать метод isFinishing () для настройки анимации в onPause вместо вызова finish ()

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()){
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
    }

}
20 голосов
/ 05 августа 2015

На этот вопрос уже дан ответ, но наиболее эффективным способом размещения анимации при выходе из действия является переопределение метода «finish ()» соответствующего действия:

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}
18 голосов
/ 14 марта 2013
finish();
overridePendingTransition(0, 0);
15 голосов
/ 10 июня 2014

Я исправил эту проблему, используя такой подход:

, чтобы открыть с анимацией:

 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);
}
12 голосов
/ 02 декабря 2010

Посмотрите на это через тему.Вы можете определить анимацию входа для действий или всего приложения

6 голосов
/ 26 октября 2012

Следуя ответу @schwiz, вот переопределение анимации для встроенной темы диалога, где я определил локальные анимации 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>

5 голосов
/ 25 сентября 2013

Используйте 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);
}
0 голосов
/ 05 октября 2015
if (getEnterAnimation() > -1 && getExitAnimation() > -1) {
    overridePendingTransition(getEnterAnimation(), getExitAnimation());
} 

, где эти методы возвращают анимацию из R.anim.YOUR_ANIMATION_XML

, добавьте этот код в onCreate () до

setContentView()

и в onPause () до

super.onPause()

Я пытался добавить этот код до / в этих методах, но анимация выхода никогда не работала

startActivity()
finish()
onBackPressed()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...