添加/删除项目时,是否可以为回收者视图的受限高度变化设置动画?

时间:2019-06-07 08:30:26

标签: android android-recyclerview android-constraintlayout

我想实现在回收者视图中添加或从回收者视图中删除项目时的行为,它根据内容更改其高度,并达到平滑动画的指定@dimen/maxRecyclerViewHeight值。在notifyItemInserted/Removed之后没有动画的情况下,它可以正常工作,但是在回收站视图下的视图正在“跳跃”,因此看起来有些奇怪。我可以使用TransitionManager.beginDelayedTransition(...)以某种方式实现它吗?我感谢其他任何想法。

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/constraint_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constrainedHeight="true"
        app:layout_constraintHeight_max="@dimen/maxRecyclerViewHeight"/>

    <!-- Other views go under the recycler view -->

</android.support.constraint.ConstraintLayout>

1 个答案:

答案 0 :(得分:0)

经过一些研究,我发现使用TransitionManager绝对可以实现这一目标。

我们假设包含约束布局的xml文件位于activity_example.xml内,其中包含约束视图。因此,在调用notifyItemInserted/notifyItemRemovednotifyItemRangeChanged之后,您可以立即调用以下方法:

private void beginDelayedTransition() {
    final ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.clone(this, R.layout.activity_example);

    // this transition is responsible for animation resizing the view
    final Transition transition = new ChangeBounds(); 
    // or any other duration        
    transition.setDuration(250);

    // constraintLayout is a root layout in the activity_example.xml
    TransitionManager.beginDelayedTransition(constraintLayout, transition);
    constraintSet.applyTo(constraintLayout);
}