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