Слайд-анимация не работает на кнопку "Назад"?

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

Slide_out.xml

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

</translate>

Slide_in.xml

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

</translate>

При нажатии кнопки панели действий

public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case R.id.home:

        finish();
        overridePendingTransition(R.anim.slide_out, R.anim.slide_in);
        return true;


    default:
        break;
    }

    return super.onOptionsItemSelected(item);

}

Ответ 1

Я использовал slide_in.xml

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

</translate>

slide_out.xml

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

</translate>

slide_enter.xml

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

</translate>

slide_exit.xml

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

</translate>

код

        Intent i=new Intent(Authentication.this,Login.class);
        startActivity(i);
        overridePendingTransition(R.anim.slide_in, R.anim.slide_out);

К предыдущему

         finish();
         overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);

Ответ 2

Сначала создайте еще одну анимацию i.e nothing.xml в вашей папке с анимацией

nothing.xml

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

</translate>

вот ваш slide_in.xml

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

</translate>

и slide_out.xml

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

</translate>

Теперь вызовите вашу NewActivity, как это

startActivity(new Intent(CurrentActivity.this, NewActivity.class));
overridePendingTransition(R.anim.slide_in, R.anim.nothing);

а затем нажмите кнопку "Назад", чтобы сделать это

finish();
overridePendingTransition(R.anim.nothing, R.anim.slide_out);

Ответ 3

Добавьте анимацию в onBackPressed, она покажет анимацию, нажав кнопку "Назад".

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

Ответ 4

Я сделал что-то похожее, и он отлично работает, вы можете изменить animate() с помощью startAnimation (your_xml), вам также нужно сделать прозрачность активности:

<item name="android:windowBackground">@android:color/transparent</item>

Эта активность будет скользить вниз, а MainActivity будет видна в момент скольжения из-за прозрачного фона. EDIT - с кнопкой панели инструментов:

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mainlinear.animate()
                    .translationY(ScUtils.getScreenHeight(getApplicationContext()))
                    .setDuration(210)
                    .setInterpolator(new AccelerateInterpolator())
                    .setListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            ThemeActivity.super.onBackPressed();
                            overridePendingTransition(0, 0);
                           }
                          }).start();
                        }
                    });

Ответ 5

Для Активности введите анимацию, используйте overridePendingTransition(R.anim.slide_out, R.anim.slide_in); в функции onCreate(...).

Для анимации выхода onPause(...) тот же вызов в onPause(...).

Ответ 6

Я был кнопка BACK/HOME на мое действие бара, который не было собирание слайда - анимации с помощью переопределения onBackPressed или finish. Поэтому мне пришлось добавить этот фрагмент отсюда. Если используются те же slide_enter и slide_exit что и выше:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    switch(id) {
        // back button
        case android.R.id.home:
            finish();
            overridePendingTransition(R.anim.slide_enter, R.anim.slide_exit);
            return true;
    }

    return super.onOptionsItemSelected(item);
}

На случай, если кто-то найдет это полезным.

Ответ 7

Я решил это, переопределив поведение кнопки "Назад".

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    finish();
    return true;
}