我想实现在回收者视图中添加或从回收者视图中删除项目时的行为,它根据内容更改其高度,并达到平滑动画的指定@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>
答案 0 :(得分:0)
经过一些研究,我发现使用TransitionManager
绝对可以实现这一目标。
我们假设包含约束布局的xml文件位于activity_example.xml
内,其中包含约束视图。因此,在调用notifyItemInserted/notifyItemRemoved
和notifyItemRangeChanged
之后,您可以立即调用以下方法:
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);
}