Как сделать слайд анимацию с фиксированным экраном и новым экраном? - PullRequest
0 голосов
/ 29 мая 2019

Я сделал три 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?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

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

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

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

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

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

0 голосов
/ 29 мая 2019

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

...