2012-07-28 72 views
8

是否可以使查看尋呼機自動滑動或autopage。我有我的viewpager設置爲使用適配器,如下面工作得很好: -如何自動滑動android查看尋呼機

@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 2012-07-28 10:15:49

+1

@sandrstar以及我不會說如果我可以得到那個:-) – Rasmus 2012-07-28 10:33:33

+0

https://github.com/ajaydewari/AutoSlideViewpager – HAXM 2017-05-11 12:58:48

回答

12

在setCurrentItem(int item,boolean smoothScroll)中設置smoothScroll = true並不總是具有平滑滾動效果。假設您在viewpager中的頁面少於5頁,您幾乎不會注意到平滑滾動。

在這種情況下,硬盤的方式來做到這一點是把它放在一個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); 

如果有人需要更多的滾動速度較慢,他們可以使用postDelayed()這樣的...

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++; 
        } 
       } 
      }; 

睡覺永遠是不建議:如果有人需要更多的滾動速度較慢,他們可能會使用一個睡在for循環...

@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 2013-11-19 01:18:03

+1

@sandrstar是的,我接受你的建議。我通過刪除Thread.sleep() – Raghu 2013-11-19 12:21:44

+0

重新編輯了代碼。它們都創建了內存泄漏。 – Ungoogleable 2016-03-10 09:34:25

11

如果您想要拖動模擬,可能需要查看以下API ViewPager.beginFakeDrag()ViewPager. fakeDragBy(float offset)ViewPager.endFakeDrag()。此外,setCurrentItem() API還提供了設置當前頁面並順利執行的功能。 我可以建議自動製作幻燈片的最簡單方法是使用簡單的Runnable來設置Handler,該Runnable將調用在活動中設置項目的傳呼機方法,並僅爲其執行postDelayed()。不要忘記在用戶交互或例如用戶交互時調用removeCallbacks()。活動暫停。

+0

你是什麼意思刪除回調?我如何刪除可運行的? – Shruti 2013-06-20 11:11:04

+0

我的意思是removeCallbacks,就像這裏http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29,它提供了取消Handler的預定Runnable執行的能力。 – sandrstar 2013-06-21 02:55:50

相關問題