Я сделал три XML-файла для перехода.

enter_from_right.xml

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

none.xml

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

exit_to_right.xml

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

Тем не менее, он просто отлично работает в Activities, а не в Fragments.

Когда я нажимаю кнопку «назад», обратный переход (всплывающее) работает нормально. Но это не работает должным образом, когда я вызываю новый фрагмент. Просто мигает при смене экрана.

Я попытался изменить продолжительность до 50 из none.xml. И я вижу, что новый экран появляется с правой стороны. А также пробовал с 10000. Но это просто задерживает смену времени.

Я использую компонент навигации. И я определил так:

        <action
            android:id="@+id/action_initFragment_to_settingFragment"
            app:destination="@id/settingFragment"
            app:enterAnim="@anim/enter_from_right"
            app:exitAnim="@anim/none"
            app:popExitAnim="@anim/exit_to_right"
            app:popEnterAnim="@anim/none"/>

Что с этим не так? Я думаю, что это из-за индекса Z. Есть ли способ дать атрибут индекса Z?

0
c-an 29 Май 2019 в 01:57

2 ответа

Лучший ответ

Это произошло из-за индекса z. Деятельность имеет разную глубину. Тем не менее, я думаю, фрагменты имеют одинаковую глубину. Таким образом, когда Фрагмент переключен на Фрагмент B, они находятся на одной глубине, и переход не отображается должным образом.

Решение заключается в том, чтобы программно отображать индекс Z на экране, как показано ниже:

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        ViewCompat.setTranslationZ(view, 1F)
    }

1F здесь, это указатель глубины.

Интересно то, что чем выше значение, тем больше тень. Если вы дадите 100F, то под ним будет огромная тень. И я не вижу видимых теней при значении 1F.

0
c-an 29 Май 2019 в 06:26

Я думаю, что вы должны использовать переход внутри переопределенного метода onAttach фрагмента.

0
cs95 3 Июл 2019 в 00:34