ViewPagerを使った読書画面の基本的な実装

電子書籍関係者で勉強会をやったので資料を公開します*1

speakerdeck.com

追記: Fragmentの状態の復帰はFragment#onViewStateRestred(Bundle)) でできるのではという指摘をいただきました。試したところ想定通り動いたのでコードの方は修正済みです。

デモ実装は https://github.com/gfx/TinyPdfReader で、以下のようなことが実装されています。詳細は資料をご覧ください。

  • ピンチイン・ピンチアウトでのズーム(PhotoViewを使用)
  • 画面の左右タップでの移動
  • Landscape時の見開き(1画面2ページ)
  • 見開きでも表紙は1ページだけでセンタリングする
  • 画面回転時の読書位置の保存
  • ページロード時の非同期画像読み込み +ふわっと表示
  • 全画面表示(immersive mode) & 画面中央タップでトグル

その他、TinyPdfReaderでは有効にしていませんが、RVP: ReversibleViewPagerというライブラリを作ったのでその紹介もしています。

読書画面はいろいろ工夫しがいがあって面白いですね。

*1:勉強会自体は非公開ですが、資料は公開しても問題ないように作りました。