DLNA(UPnP)のカレンダー型プレイヤーを作ろう。
最初に考えたのは、4年前でした。(もうひとつのアプリ)
具体的にGUIを考えてみたら、割と単純そう。
とりあえず、ゆっくり作っていくことにします。
第一歩は、ViewPagerで左右に無限にスワイプする。
ところが、googleってみても思うような実装が見つからない。
私がやりたいのは、
1. ページの遷移だけViewPagerのActivityで実現する。
1〜3ページを用意して、スワイプ後は常に第2ページに戻る。
2. その上のFragmentの内容を書き換える。
シームレスな見た目にできるし、これが一番シンプルな実装だと思うのですが。
とりあえず、ViewPagerだけ実装できました。
SectionsPagerAdapterで3ページを用意する。
@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
onCreate()に次で、第2ページから開始する。
// Start with central page.
mViewPager.setCurrentItem(1);
mViewPagerにonPageScrollStateChanged()を実装し、ページ遷移後に第2ページへ戻る。
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// 確認用のカウンタ
switch (position) {
case 0:
counter -=1;
break;
case 2:
counter +=1;
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
if (mViewPager.getId() != 1) {
if (ViewPager.SCROLL_STATE_IDLE == state) {
// ページ遷移が終わった後
try {
Thread.sleep(200); // 自然に見えるように(?)、タイムラグを設ける。
} catch (InterruptedException e) {
}
mViewPager.setCurrentItem(1); // 第2ページへ戻る。
String position = Integer.toString(counter);
Button button = (Button) findViewById(R.id.button_test);
button.setText(position);
}
}
}
});
ついでに、Fragmentの差し替えで、Month, Week, Day表示を切り替えもできる。