2012年11月18日日曜日

Android ループできる ViewPager (完全版)作った

LoopViewPager

github : yanzm/LoopViewPager - https://github.com/yanzm/LoopViewPager

ループできる ViewPager です。
(Loop ViewPager, Looping ViewPager)

以前に How to create looping ViewPager というエントリーを書きましたが、不完全だったので、まともなものを作りました。

今回は制限なしです。
Support Package v4 の ViewPager の代わりに使うだけで OK です。
ViewPager から PagerAdapter の package private なメソッドを呼んでいるので、PagerAdapter, FragmentPagerAdapter, FragmentStatePagerAdapter は LoopViewPager と同じパッケージにあるやつを使ってください。

r11 の Suppor Pakcage v4 の ViewPager のコードをベースに変更しています。
PagerAdapter を継承したアダプターの使い方は今まで通りです。

使い方 <com.uphyca.android.loopviewpager.LoopViewPager xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" /> public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LoopViewPager pager = (LoopViewPager) findViewById(R.id.pager); pager.setAdapter(new MyFragmentStatePagerAdapter(getFragmentManager())); pager.setAdapter(new MyPagerAdapter()); } class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter { public MyFragmentStatePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return SimpleFragment.newInstance(position); } @Override public int getCount() { return 10; } } }

2 件のコメント:

  1. Hi,
    thank you ,for you code, it's the best for loopviewpager.

    I have this problem, when I implement "public float getPageWidth(int position) " the loopviewpager don't works fine :(

    Do you have a solution?

    返信削除
  2. こんにちは。
    後藤と申します。

    いつも大変参考にさせていただいております。

    現在、LoopViewPagerを参考にアプリを作成させていただいております。
    当アプリでは、画面上にページ1の右側、ページ2の全体、ページ3の左側を表示させています。
    しかし、ページ3を画面の中央にフリックさせたとき、ページ4が表示されるのに多少時間がかかってしまいます。
    そこで、画面の初期表示時には、左右に2ページずつ用意されている状態にし、フリック時には2つ先のページを作成するようにしたいと考えております。
    自分なりにLoopViewPagerを色々とみてみたのですが、どこを変更すればよいのか考えあぐねております。

    よろしければご教示頂けると幸いです。

    以上、よろしくお願い致します。

    返信削除