読者です 読者をやめる 読者になる 読者になる

RecyclerViewのpreloadが素敵だよねっていう話

preload

・List形式で1行が1画面のImageView
・次の行のImageViewも先に描画しておきたい
という感じでスムーズに高画質な画像を描画することによって、ストレスを与えないようにListしようと言うお話。

ListViewでの実装

わからなかった。
そもそもgetView()まわりをどういじってもきつそうだし、根本的にListViewからいじらないといけなさそうだった。

RecyclerViewでの実装

LinearLayoutManager | Android Developers

LinearLayoutManagerのgetExtraLayoutSpaceを実装することによってpreloadを実現できた。
ドキュメント自体にも

You can override this method to implement your custom layout pre-cache logic.

と、あるようにpre-cache周りをイジれる。
ただ、当然パフォーマンスコストも上がるよという注意も。

ということで、実装したLinearLayoutManagerがこちら。

さらにRecyclerView#setItemViewCacheSizeでキャッシュサイズをデフォルトの1から増やすことによってViewPagerのPageCacheのようにキャッシュすることが出来る。
かなり素敵機能。
これもパフォーマンスコストが上がるが、結構ハード面がクリアしてくれるんじゃないかという期待をかなりしている。

最後に

ListViewだとかなりの工数をかけて実装しないといけないところだったが、RecyclerViewがあったおかげで、結構爆速で実装できた。
多分今後もこんな感じでListViewだと出来ない!っていうところからRecyclerViewを使おうと言う流れになることもあるのかなと思ったり。

はー難しい。