'animateLayoutChanges = true', смешанное с анимацией действий, заставляет экран мерцать на 'view.visibility = View.VISIBLE' - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь реализовать плавную анимацию перевода, когда видимость вида установлена ​​на 'visible'. Я достиг этого раньше с помощью animateLayoutChanges = true в родительском представлении xml.

Теперь я снова сталкиваюсь с этой проблемой, потому что видимое представление - это изображение CollapsingToolbar, и представление, которое вытягивается внизу вместе с этим изображением находится Фрагмент моей навигации.

Я объясню немного больше, что я здесь делаю. Я реализовал нижнюю панель навигации и сворачивающуюся панель инструментов. Когда я внутри фрагмента, я нажимаю элемент recyclerView, это переводит меня к другому фрагменту. В этом новом фрагменте я установил видимость изображения на Visible, и свернутая панель инструментов успешно расширилась! Но бывает с ужасным мерцанием. Если мой глаз меня не обманывает, мерцают только изображение и фрагмент, что имеет смысл, учитывая, что движутся только эти двое.

Это мой XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blackBackground">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/main_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        app:elevation="0dp">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:animateLayoutChanges="true"
            android:minHeight="?attr/actionBarSize"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/main_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:elevation="4dp"
                android:minHeight="?attr/actionBarSize"
                android:theme="@style/BlackActionBar"
                app:layout_collapseMode="pin"
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
                app:popupTheme="@style/BlackActionBarPopUp" />

            <ImageView      //THIS IS THE VIEW THATS GONE AND THEN I SET TO VISIBLE
                android:id="@+id/category_image"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:minHeight="?attr/actionBarSize"
                android:scaleType="centerCrop"
                android:src="@drawable/image_ceva"
                android:visibility="gone"
                app:layout_collapseMode="parallax"
                app:layout_scrollFlags="scroll|enterAlways" />


        </com.google.android.material.appbar.CollapsingToolbarLayout>

    </com.google.android.material.appbar.AppBarLayout>

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="?attr/actionBarSize"
        app:defaultNavHost="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:navGraph="@navigation/mobile_navigation" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_gravity="bottom"
        android:background="@drawable/navbar_background"
        app:itemIconTint="@drawable/navbar_colors"
        app:itemTextColor="@drawable/navbar_colors"
        app:menu="@menu/bottom_nav_menu" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Это прекрасно работает, когда я отключаю анимацию своего mobile_navigation.

 <action
        android:id="@+id/action_video"
        app:destination="@id/navigation_videos"
        app:enterAnim="@anim/nav_default_enter_anim"
        app:exitAnim="@anim/nav_default_exit_anim"
        app:popEnterAnim="@anim/nav_default_pop_enter_anim"
        app:popExitAnim="@anim/nav_default_pop_exit_anim" />

Каким-то образом animateLayoutChanges, смешанные с анимацией из моего действия, заставляют мой экран мерцать. Но я не знаю, как это реализовать по-другому.

Итак, что было бы решением этой проблемы?

Спасибо.

...