上記の式を満たすとき、2つ目のアイテムがドラッグされます。アイテムの並び替え次にアイテムの並び替えをしていきます。並び替えはドラッグされているアイテムとそれ以外のアイテムの位置を比較して入れ替えていきます。下記が実際のコードです。そのアイテムを入れ替えのターゲットとする。targetItem.offset}},・・・)}・・・)コードについて細かくみていきます。コード中のコメントにも細かく説明していますが、個人的にわかりづらかった箇所を図解します。middleOffsetについてです。下の図では橙色の線がmiddleOffsetの位置を表しています。ドラッグしたアイテムのmiddleOffsetの位置によって、アイテムを入れ替えるか判断しています。判定式は以下のようになります。y例えば、ドラッグしたアイテムのmiddleOffsetが、別のアイテムの上端に達すると以下のようになります。判定式は以下のようになります。topこのようにmiddleOffsetが各アイテムの橙色の領域まで到達すると、入れ替える2つのアイテムとして検知し、検知したタイミングでリストの中身を入れ替える処理を行います。これによって、リストの入れ替えを行うことができます。オーバースクロール次にオーバースクロールです。こちらはドラッグしたアイテムがリストの上端・下端に来た時にスクロールをさせる処理を実装します。以下がコードになります。画面から飛び出た分だけスクロールさせるscrollChannel.trySend(scroll)}}},・・・)}・・・)・・・ドラッグしているアイテムがリストの上端・下端に来た時に、直接リストをスクロールさせる処理を呼び出しているのが上記のコードになります。以下の図のような状態があったとします。startOffsetToTopやendOffsetToBottomの位置に来たかを検知し、scrollChannel.trySend(scroll)の処理を行っています。この様にして、リストのアイテムが上端・下端に来た時はリストをスクロールさせています。実際にスクロールさせる幅は、どれだけ上端・下端を越えたかを計算し決めています。このとき、判定式は以下になります。yこれで必要な実装は完了しました。実際に作ったサンプルの動作は以下のようになります。パンのアイテムが並び替えられるように作っています。ドラッグ中のアイテムがリストの端まで達するとスクロールするように実装できています。ここではリスト以外にもComposeで要素を置いているのですが、リスト以外のComposableは並び替えに反応しないようになっています。今回は並び替えの部分は実装できたのですが、並び替えている最中のアイテムの動きがアニメーションで表示されないため、動かしている事が分かりづらいです。したがって、改めて並び替えのアニメーションについて記事を書ければと思います。ついての一例を紹介しました。Composeのライブラリそのもので実装できない事も多いですが、段々とXMLで出来ることがComposeでも出来るようになってきました。自分の携わるプロジェクトでも全てのUIをComposeで実装できればなと考えてます。ここまで読んでいただきありがとうございます。私が実装したものをGitHubにあげています。LazyColumnで並び替えを実装しようとしている方の参考になれば幸いです。寺島広レコチョクの寺島です。アプリ開発に携わっています。アニメ、ゲームなどが好きです。こんにちは、Androidアプリ開発グループの休井です。ページのデバッグ初めまして、普段Androidアプリを開発している杉山です。