如何自动滑动android View Pager

Ras*_*mus 9 android android-viewpager

可以将View Pager设置为自动滑动或自动播放.我将我的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);
}
Run Code Online (Sandbox Code Playgroud)

适配器如下: -

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);
}}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道如何在viewpager中使这些片段自动滑动.

Rag*_*ghu 13

在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);
Run Code Online (Sandbox Code Playgroud)

如果有人需要更慢的滚动,他们可以像这样使用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++;
                    }
                }
            };
Run Code Online (Sandbox Code Playgroud)

总是不推荐睡眠:如果有人需要更慢的滚动,他们可能会在这个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();

        }
Run Code Online (Sandbox Code Playgroud)

  • 绝对是,在UI线程中睡眠是一个坏主意.最好使用postDelayed()代替. (4认同)

san*_*tar 11

或许,您应该查看以下API ViewPager.beginFakeDrag(),ViewPager.如果您想要拖动模拟,可以使用fakeDragBy(浮点偏移)ViewPager.endFakeDrag().此外,setCurrentItem() API提供了设置当前页面并顺利完成的功能.我建议自动制作幻灯片的最简单方法是使用简单的Runnable 设置Handler,它可以调用寻呼方法来设置活动中的项目,并为它执行postDelayed().并且不要忘记在用户交互或活动暂停时调用removeCallbacks().