Слайд-анимация не работает на кнопку "Назад"?
Я использую анимацию при входе или выходе из активности, вхождение в анимацию активности отлично работает, но выход из анимации не работает. Я запускаю анимацию выхода, когда я нажимаю кнопку "Назад". Что происходит, это сначала начать вводить анимацию для текущей активности, а затем показывать последнюю активность, что я хочу, чтобы кнопка простого выхода была нажата на кнопку "Назад".
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;
}