2012-07-28 77 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

相关问题