2012-07-28 14 views
8

ビューページャを自動スライドまたはオートページにすることはできますか?私は私のviewpagerは、以下のようなアダプタを使用するように設定している、それが正常に動作します: -自動スライドアンドロイド表示ページャ

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.gridslide); 
ImagePagerAdapter mAdapter = new ImagePagerAdapter(
     getSupportFragmentManager(),4); 
ViewPager mPager = (ViewPager) findViewById(R.id.pager); 
mPager.setAdapter(mAdapter); 
} 

とアダプタは、以下のようなものです: -

public static class ImagePagerAdapter extends FragmentStatePagerAdapter { 
private final int mSize; 

public ImagePagerAdapter(FragmentManager fm, int size) { 
    super(fm); 
    mSize = size; 
} 

@Override 
public int getCount() { 
    return mSize; 
} 
@Override 
public Fragment getItem(int position) { 
    Log.v(TAG,"position="+position); 
    return TheFragment.newInstance(position); 
}} 

私が作る方法を知りたいでしょうがこれらのフラグメントはビューページで自動スライドします。

+0

スライドアニメーションもしたいですか? – sandrstar

+1

@sandrstarよく私もそれを得ることができないと言うことはありません:-) – Rasmus

+0

https://github.com/ajaydewari/AutoSlideViewpager – HAXM

答えて

12

setCurrentItem(int item、boolean smoothScroll)でsmoothScroll = trueを設定してもスムースなスクロール効果が得られるとは限りません。あなたのページが5ページ以下であれば、スムーズにスクロールすることはほとんどありません。

このシナリオでは

、それを行うにはハードな方法は、次のように)いくつかのいずれかが、より低速のスクロールが必要な場合、彼らはpostDelayedを(使用することができますforループ

//This will scroll page-by-page so that you can view scroll happening 
for (int i = 0; i < mAdapter.getCount()-1; i++) 
    mPager.setCurrentItem(i, true); 

にそれを置くことです...

static int i=0; 
private final Handler handler = new Handler(); 
somefunction() 
{ 
    handle.post(ViewPagerVisibleScroll); 
} 

    Runnable ViewPagerVisibleScroll= new Runnable() { 
       @Override 
       public void run() { 
        if(i <= mAdapter.getCount()-1) 
        { 
         mPager.setCurrentItem(i, true); 
         handle.postDelayed(TopChartAnimation, 100); 
         i++; 
        } 
       } 
      }; 

睡眠は常に推奨されていません:いくつかのいずれかが、より低速のスクロールが必要な場合、彼らはループのために、この中で睡眠を使用することができます...

@Override 
public void onClick(View v) { 
Runnable runnable = new Runnable() { 
       @Override 
       public void run() { 
        for (int i = 0; i < mAdapter.getCount()-1; i++) { 
         final int value = i; 
         try { 
          Thread.sleep(50); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           mPager.setCurrentItem(value, true); 
          } 
         }); 
        } 
       } 
      }; 
      new Thread(runnable).start(); 

     } 
+4

間違いなく、UIスレッドのスリープは悪い考えです。代わりにpostDelayed()を使用する方が良いでしょう。 – sandrstar

+1

@sandrstarはい、私はあなたの提案を受け入れます。 Thread.sleep()を削除してコードを再編集しました – Raghu

+0

両方ともメモリリークを作成します。 – Ungoogleable

11

おそらくドラッグシミュレーションが必要な場合は、次のAPI ViewPager.beginFakeDrag()ViewPager. fakeDragBy(float offset)ViewPager.endFakeDrag()をご覧ください。また、setCurrentItem() APIは、現在のページを設定してスムーズに行う機能を提供します。 私がスライドを自動的に作ることを提案する最も簡単な方法は、単純なRunnableを使ってHandlerを設定することです。これはポケベルのメソッドを呼んでアクティビティ内のアイテムを設定し、postDelayed()を実行するだけです。また、ユーザーとのやり取り時などにremoveCallbacks()を呼び出すことを忘れないでください。アクティビティの一時停止。

+0

コールバックを削除するとどういう意味ですか??どのように実行可能ファイルを削除できますか? – Shruti

+0

私はremoveCallbacksを意味していました。http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29では、ハンドラーのスケジュールされたRunnable実行を取り消すことができます。 – sandrstar

関連する問題