Note
この記事はcom.android.support.constraint:constraint-layout:2.0.0-alpha2時点のMotionLayoutについての記述です。
まだアルファ版なので将来的に挙動が大きく変わる可能性があります。
MotionLayout 内にある RecyclerView をスクロール可能にする
MotionScene内の<OnSwipe>にmoveWhenScrollAtTopというプロパティがあり、これがtrueのときにRecyclerViewがスクロール可能になります。これがfalseになると、アニメーションが動くべき方向にドラッグしたときにアニメーションが始まってしまいます。
たとえば、MotionScene で定義した動きとして縦にスクロールするRecyclerView を下にドラッグするとアニメーションするような場合、moveWhenScrollAtTopがtrueの場合は RecylerView のもつ 0 番目のアイテムが一番上にきたときにアニメーションを開始し、falseのときはスクロールせずにアニメーションを開始します。
RecylerView のスクロールと MotionLayout のアニメーション開始を別に扱いたい
moveWhenScrollAtTopがtrueのとき、RecyclerView を勢いよくフリングすると、0 番目のアイテムが一番上に来た直後に MotionLayout へMotionEventが流れてアニメーションが動いてしまいます。この動きは RecyclerView の定義にあるもので、自分がこれ以上スクロールできない位置まで来ると、NestedScroll できる親にMotionEventが流れるようになっています。
もし RecyclerView のスクロールに続いて MotionLayout のアニメーションを動かしたくない(RecyclerView のスクロールジェスチャと MotionLayout のスワイプジェスチャを別にする)場合は、RecyclerView のnestedScrollingEnabledをfalseにします。
ただし、RecyclerView の ViewPort が一番端にないときに MotionLayout のアニメーションを動かすと、つぎに RecyclerView でスクロールジェスチャをしようとすると RecyclerView はスクロールせず MotionLayout のアニメーションが始まってしまうバグが起きる可能性があります。