You should wrap your MotionLayout
in a SwipeRefreshLayout
like this:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.motion.widget.MotionLayout
android:id="@+id/motion_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/play_scene">
<!-- Some xml code -->
</androidx.constraintlayout.motion.widget.MotionLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
And then you must add a MotionLayout.TransitionListener
to your MotionLayout
to enable/disable
your SwipeRefreshLayout
depending on the MotionLayout
state.
binding.motionLayout.setTransitionListener(object :MotionLayout.TransitionListener{
override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {
}
override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
}
override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {
Log.d("RepairsFragment","$p1 $p2 $p3")
if (p3 == 0f) {
binding.refresh.isEnabled=true
} else {
binding.refresh.isEnabled = false
binding.refresh.isRefreshing=false
}
}
override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
}
})