Как анимировать (скользить снизу) изменение видимости фрагмента, который является выравниванием по дну? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть фрагмент с выравниванием снизу к активности, которая занимает только часть экрана. Во фрагменте есть вид, который отображается и скрывается после щелчка.

До сих пор root вид во фрагменте имел android:animateLayoutChanges="true", но в анимации присутствуют такие же артефакты, как прыжки.

    <androidx.appcompat.widget.LinearLayoutCompat
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:animateLayoutChanges="true"
            android:clipChildren="false"
            android:clipToPadding="false"
            android:orientation="vertical">

        <RelativeLayout
                android:id="@+id/buttonsView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clipChildren="false"
                android:clipToPadding="false"
                android:focusable="true"
                android:descendantFocusability="afterDescendants"
                android:visibility="gone"
                tools:visibility="visible">  
            <!-- same buttons -->
        </RelativeLayout> 

         <androidx.appcompat.widget.LinearLayoutCompat
            android:orientation="vertical"
            android:id="@+id/rowContainer"
            android:visibility="gone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
           <!-- row items -->
         </androidx.appcompat.widget.LinearLayoutCompat>

Для улучшения анимации я стараюсь:

  1. использовать TransitionManager
TransitionManager.beginDelayedTransition(binding.rowContainer)
binding.rowContainer.visibility = View.VISIBLE
поставить вышеупомянутый пользовательский переход:
<transitionSet 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:transitionOrdering="together">
    <changeBounds android:duration="5000" />
    <slide android:duration="5000" 
           android:slideEdge="bottom"        
           android:startDelay="0"/>

 </transitionSet>

, но это вызывает только то, что задержка сдвигается внутрь.

val slideIn = AnimationUtils.loadAnimation(context, R.anim.slide_in_bottom)
binding.rowContainer.startAnimation(slideIn)


<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
            android:duration="600"
            android:fromYDelta="50%p"
            android:toYDelta="0" />
    <alpha
            android:duration="600"
            android:fromAlpha="0.5"
            android:toAlpha="1.0" />
</set>

аналогичный результат.

Так как скользить из нижнего фрагмента без переходов, которые находятся над отображением? точно так же, как это другой элемент в списке, который перемещается на один элемент вверх.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...