OverridePendingTransition для плавной активности в режиме ожидания
У меня возникли проблемы с выяснением того, как можно перемещать действия и выходить одним нажатием кнопки. Я хочу, чтобы пользователь нажал кнопку, а затем слайды экрана. То, что я хочу, это для 1-го действия (тот, у которого есть кнопка), чтобы выскочить влево, а вторая вторая активность сместилась справа.
С помощью приведенного ниже кода, когда кнопка нажата, 1-я активность скользит вправо, когда я хочу, чтобы она сдвигалась влево. Затем, когда это делается сползанием, все, что осталось, является черным экраном в течение секунды секунды, а затем 2-я активность просто появляется и не скользит.
Итак, 1-я деятельность отклоняется от неправильного направления, и следующая активность просто появляется, а не скользя. Что я делаю не так? Мне трудно понять XML файлы, так что слушайте код для всего ниже.
1-я деятельность
@Override
public void onCreate(Bundle savedInstanceState) {
playBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainMenu.this, Levels.class);
startActivity(intent);
overridePendingTransition(R.anim.enter_from_right, R.anim.exit_out_left);
}
});
Вторая активность
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.levels);
overridePendingTransition(R.anim.enter_from_left, R.anim.exit_out_right);
Поэтому я думаю, что некоторые из моих XML файлов могут быть неправильными. Вот они.
enter_from_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromXDelta="100%"
android:toXDelta="0%" >
</translate>
</set>
enter_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromXDelta="-100%"
android:toXDelta="0%" >
</translate>
</set>
exit_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromXDelta="0%"
android:toXDelta="-100%" >
</translate>
</set>
exit_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="600"
android:fromXDelta="0%"
android:toXDelta="100%" >
</translate>
</set>
ИЗМЕНИТЬ
Удаление overridePendingTransition()
из 2-го действия сделало так, чтобы 1-я активность скользнула влево, что я и хотел. Но, когда 1-я активность ускользает, она по-прежнему просто показывает черный экран вместо того, чтобы сделать второй снимок активности справа.
Ответы
Ответ 1
Вместо переопределения анимации как в startActivity()
, так и в новых действиях onCreate()
вам нужно только переопределить анимацию сразу после вызова startActivity()
.
Два int
, которые вы предоставляете для overridePendingTransition(int enterAnim, int exitAnim)
, соответствуют двум анимациям - удалению старого Activity
и добавлению нового.
Для вашего второго вопроса, я считаю, что у вас установлено неправильное значение fromXDelta, -100% должно быть на всем пути от левой стороны экрана, а не справа, поэтому измените это на 100% должны исправить это.
Ответ 2
Ошибка не только в анимации enter_from_right, которая должна иметь значение fromXDelta 100% вместо -100%, но даже в анимации enter_from_left, которая должна иметь значение fromXDelta -100% вместо 100%.
Приветствия,
Ответ 3
Измените fromXDelta
на -100%
от enter_from_left
и fromXDelta
до 100%
от enter_from_right
в коде, это даст вам правильную скользящую анимацию.
Ответ 4
Посмотрите на мой смысл, он отлично работает:
1.Нажмите "Начальная активность" и завершите
@Override
public void startActivity(Intent intent) {
super.startActivity(intent);
overridePendingTransition(R.anim.from_right_in, R.anim.from_left_out);
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.from_left_in, R.anim.from_right_out);
}
2.from_left_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p"
android:toXDelta="0"
android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>
3.from_right_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p"
android:toXDelta="0" android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>
4.from_left_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0"
android:toXDelta="-100%p"
android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>
5.from_right_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0"
android:toXDelta="100%p"
android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>
ссылка gist: https://gist.github.com/JagieChen/f5cc44bf663f3722bd19097be47ccf9b