我有一个Fragment
,其中包含MotionLayout
内的RecyclerView
。在Recycler View上面,我有一个视图可以折叠和展开,所有这些都在我的动画场景中完成。它由点击触发,并响应拖动Recycler View。到目前为止,这一切都按预期工作。
现在来到关键点:我希望在应用程序的某些状态下完全隐藏可折叠视图。但是,如果我设置视图的可见性或更改其高度,则当我拖动Recycler View时,它仍会重新出现。
那么,是否可能完全禁用MotionLayout(锁定约束),直到我再次启用它?禁用拖动识别器也将是一种可行的解决方案。
以下是一些简化的XML以演示该情况。
包含头部视图和Recyclerview的布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/favouritesMotionLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/favourites_motion_scene"
android:animateLayoutChanges="true">
<ImageView
android:id="@+id/headerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
/>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
...
>
<androidx.recyclerview.widget.RecyclerVieww
android:id="@+id/favoritesList"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.motion.widget.MotionLayout>
对应的运动场景:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto"
>
<Transition
motion:constraintSetStart="@id/expanded"
motion:constraintSetEnd="@id/collapsed"
motion:duration="300">
<OnSwipe
motion:touchAnchorId="@id/swipeRefreshLayout"
motion:touchAnchorSide="top"
motion:dragDirection="dragUp" />
</Transition>
<ConstraintSet android:id="@+id/expanded">
... Constraints for expanded header ...
</ConstraintSet>
<ConstraintSet android:id="@+id/collapsed">
... ... Constraints for collapsed header ...
</ConstraintSet>
</MotionScene>
使用约束布局版本“2.0.0-alpha3”
implementation "com.android.support.constraint:constraint-layout:2.0.0-alpha3"
因此,简要概括一下:我希望能够禁用运动布局,这样我就可以滚动RecyclerView而不会扩展标题,直到我再次启用它为止。不幸的是,这并不像favouritesMotionLayout.isEnabled = false
那么简单,但这是我考虑的方法。