仕事でViewPagerのループ版を作らせれました。
結構前からあるデザインですが、未だに使われているようなので、作り方をおぼえておかないといけない。
ViewPagerを自分でカスタマイズしても多分できますが、時間の関係でライブラリーから引っ張ってくることにしました。

今回作りたいのは、以下のような画面です。
スクリーンショット 2016-06-24 19.33.22

使用したのは、以下のライブラリーです。
https://github.com/imbryk/LoopingViewPager

画面からはわかないが、スワイプすることにより、写真がループします。
では、実装を起動動線となるMainActivityから

LoopViewPagerを描画しているだけです。
では、layout

FragmentクラスであるPageFragmentを埋め込んでいます。
では、PageFragment

まずは、LoopViewPagerを初期化、そしてindicatorを変更させるために、
listenerをセットしています。
mPager.setOnPageChangeListener
ここでは、ページが切り替わった時に呼ばれる
public void onPageSelected(int position)
をindicatorを再描画するためのメソッドとして使用しています。
中身はみりゃわかります。

続いて、LoopViewPagerにセットしているadapter

大事なのは、Viewが生成される時に呼ばれる
public Object instantiateItem(ViewGroup container,int position)
です。
まず、定型文としてinflatorを生成
Viewをinflatorとxmlを使用して生成。
xmlにセットされているimageviewに画像をセットする。
container(ViewPagerのView)に先ほど生成したViewをセットする
という感じです。
あとは、destroyItemですか

public void destroyItem(ViewGroup collection, int position, Object view)

不要になったViewをリリースする役目みたいですね。
あとは、ViewPagerにセットしているレイアウトxmlです。

単純なimageViewのみがセットされたレイアウトになっています。

今回は、単純な画像だけのpagerですが、Fragmentなどをセットする場合は、
ライブラリー群に書いてある、Actualなんちゃら関数を使わないと、正確な値がとってこれないみたいで、仕事で使った時もそのあたりを使って、ページに対しての正確なpage番号を取得たので、そのあたりはライブラリの中身を見るといいと思います。

最後にgithubのパスを載せます。
https://github.com/jiji4000/android-viewpager/tree/loop_view_pager
全部プルしてください

Pocket