StickyHeaderBehavior

カスタムな CoordinatorLayout.Behavior の実験として、CoordinatorLayoutRecyclerView でスティッキー*1なヘッダを作ってみる。

仕様

 汎用的なライブラリを作るわけじゃないので、以下のようにやってみる。

  • CoordinatorLayout 直下に RecyclerView を配置する。
  • RecyclerView 内部の任意の範囲をヘッダ付きリストとして扱い、その範囲外はヘッダ付きリストの外側として扱う。
  • LinearLayoutManager を利用する。
  • 縦スクロールのみ。
  • コードリーディングに事前知識を必要としないよう利用ライブラリを最低限にとどめる。

StickyHeader の無い状態

f:id:beyondseeker:20180402221349p:plain:w200 f:id:beyondseeker:20180402221406p:plain:w200
ソースはこちら

StickyなHeaderを付与する機能の作成

 描画するタイミングにて、Adapter 内部のヘッダ位置と、ヘッダ付きリストの終端位置さえわかれば sticky なヘッダは作れるはず。ということで StickyHeaderBehavior を作成。

Sticky機能を追加

f:id:beyondseeker:20180402230004p:plain:w200 f:id:beyondseeker:20180402230013p:plain:w200
f:id:beyondseeker:20180402230022p:plain:w200 f:id:beyondseeker:20180402230032p:plain:w200
ソースはこちら
sticky でない状態から sticky な状態に変更する際の差分はこちら

まとめ

 ざっくりと作ってみましたが、カスタムな CoordinatorLayout.Behavior の実験としてはこんなもんでしょうか。

*1:Excelの先頭行を固定するようなやつ