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 を継承したアダプターの使い方は今まで通りです。

使い方
  1. <com.uphyca.android.loopviewpager.LoopViewPager   
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:id="@+id/pager"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent" />  
  1. public class MainActivity extends Activity {  
  2.   
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.    
  8.         LoopViewPager pager = (LoopViewPager) findViewById(R.id.pager);  
  9.         pager.setAdapter(new MyFragmentStatePagerAdapter(getFragmentManager()));  
  10.         pager.setAdapter(new MyPagerAdapter());  
  11.     }  
  12.   
  13.     class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter {  
  14.   
  15.         public MyFragmentStatePagerAdapter(FragmentManager fm) {  
  16.             super(fm);  
  17.         }  
  18.   
  19.         @Override  
  20.         public Fragment getItem(int position) {  
  21.             return SimpleFragment.newInstance(position);  
  22.         }  
  23.   
  24.         @Override  
  25.         public int getCount() {  
  26.             return 10;  
  27.         }  
  28.     }  
  29. }  
  30.    

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を色々とみてみたのですが、どこを変更すればよいのか考えあぐねております。

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

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

    返信削除