【发布时间】:2021-07-09 12:42:21
【问题描述】:
任何想法如何使用 MotionLayout 实现 scrollToPosition?
目前我有一个 RecyclerView 和一些隐藏在滚动上的标题,如果你滚动到顶部会显示。这是场景:
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@id/start"
motion:duration="1000">
<OnSwipe
motion:touchAnchorId="@+id/header"
motion:dragDirection="dragUp"
motion:onTouchUp="stop" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/header"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:visibility="visible"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toBottomOf="@id/toolbar" />
<Constraint
android:id="@+id/recycler_view"
android:layout_width="0dp"
android:layout_height="0dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toBottomOf="@id/header" />
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/header"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:visibility="invisible"
motion:layout_constraintBottom_toTopOf="parent"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent" />
<Constraint
android:id="@+id/recycler_view"
android:layout_width="0dp"
android:layout_height="0dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toBottomOf="@+id/toolbar" />
</ConstraintSet>
当一个 Item 被插入到 RecyclerView 中时,我希望它滚动到底部,所以我写了这个:
private fun scrollToBottom() {
val position = routineSetsAdapter.itemCount - 1
binding.motionLayoutContainer.transitionToEnd()
binding.recyclerView.scrollToPosition(position)
}
它适用于一些项目,但在添加 10 个项目之后,如果你在顶部并添加一个项目,RecyclerView 会滚动,但它与 MotionLayout 不同步。有没有办法以编程方式滚动 recyclerView 的运动布局。如果您自己滚动,它会正常工作。
【问题讨论】:
-
binding.motionLayoutContainer.transitionToEnd(() -> binding.recyclerView.scrollToPosition(position));你试过了吗? -
是的,结果相同。
标签: android android-recyclerview android-motionlayout android-scroll