Переходы активности не работают

Я пытаюсь реализовать переходы активности, но не вижу эффекта. Вот код для моего первого действия:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_architecture);
        setUpWindowAnimations();
    }

private void setUpWindowAnimations() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            Log.i("ANIM", "Fade called");
            Fade fade = new Fade(2);
            fade.setDuration(3000);
            getWindow().setExitTransition(fade);
        }
    }

Вот код для второго действия:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image);
        setUpWindowAnimations();
    }

private void setUpWindowAnimations() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            Log.i("ANIM", "slide called");
            Slide slide = new Slide(Gravity.LEFT);
            slide.setDuration(3000);
            getWindow().setEnterTransition(slide);
        }
    }

Несмотря на то, что я установил анимацию Fade out, затухания также нет, слайд работает по умолчанию, то есть направление ВНИЗ, а не ВЛЕВО.

Вот мои values/style.xml и вот мой v21/styles.xml.

Вот мой AndroidManifest.xml:

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme">

Почему эти переходы не работают и как заставить их работать. Я использовал paste.ubuntu.com, потому что редактор SO неправильно отображал xml.


person Amit Tiwari    schedule 28.01.2016    source источник
comment
Вы определили стиль в styles.xml с помощью пользовательского перехода?   -  person IgorGanapolsky    schedule 28.01.2016
comment
@IgorGanapolsky Нет, не видел. Вы можете проверить оба моих styles.xml, я дал ссылку.   -  person Amit Tiwari    schedule 28.01.2016
comment
Ссылка paste.ubuntu, которую вы разместили, не работает.   -  person IgorGanapolsky    schedule 28.01.2016
comment
@IgorGanapolsky styles.xml и v21/styles.xml   -  person Amit Tiwari    schedule 28.01.2016
comment
Было ли это когда-нибудь решено? У меня похожая проблема.   -  person Brian    schedule 06.07.2016
comment
да, это работает на леденце выше.   -  person Amit Tiwari    schedule 07.07.2016


Ответы (2)


Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this).toBundle();
this.startActivity(intent,bundle);

Добавьте эти две строки после того, как вы настроите свое намерение между двумя действиями, это сработает.

Вы не можете просто запустить активность с помощью метода startActivity(intent), вам нужно указать переходы между активностями с помощью пакетов.

person Abhishek Tiwari    schedule 06.04.2016

Объявите setUpWindowAnimations(); перед setContentView.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setUpWindowAnimations();
        setContentView(R.layout.activity_architecture);

    }

private void setUpWindowAnimations() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            Log.i("ANIM", "Fade called");
            Fade fade = new Fade(2);
            fade.setDuration(3000);
            getWindow().setExitTransition(fade);
        }
    }

Другое решение

сделайте xmlTransition и поместите туда этот код xml

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:interpolator="@android:interpolator/accelerate_decelerate">
    <fade android:fadingMode="fade_out"/>
    <slide android:slideEdge="bottom"/>
</transitionSet>

Это должен быть ваш стиль для Api21

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowTransitionBackgroundFadeDuration">1000</item>
    </style>
</resources>

Затем поместите этот код в свою активность перед setCreateView

if (Build.VERSION.SDK_INT >= 21) {

            TransitionInflater inflater = TransitionInflater.from(this);
            Transition transition = inflater.inflateTransition(R.transition.transition_a);
            getWindow().setExitTransition(transition);
        }

это должно быть в вашей другой деятельности до setCreateView

if(Build.VERSION.SDK_INT >= 21){
            Slide slide = new Slide();
            slide.setDuration(1000);
            getWindow().setEnterTransition(slide);
        }
person Zeeshan Shabbir    schedule 28.01.2016
comment
он тоже не работает. Я изменил направление слайда налево, и он все еще скользит снизу. - person Amit Tiwari; 28.01.2016
comment
Почему это должно быть до setCreateView?? - person IgorGanapolsky; 28.01.2016
comment
вы тестируете его на устройстве 21›? - person Zeeshan Shabbir; 29.01.2016