首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动滑动android View Pager

如何自动滑动android View Pager
EN

Stack Overflow用户
提问于 2012-07-28 14:53:12
回答 4查看 35.5K关注 0票数 9

可以将视图分页设置为自动幻灯片或自动分页吗?我将我的viewpager设置为像下面这样使用适配器,它工作正常:

代码语言:javascript
复制
@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);
}

适配器如下所示:

代码语言:javascript
复制
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);
}}

然而,我想知道如何让这些片段在viewpager中自动幻灯片。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-13 18:55:04

在setCurrentItem(整型项目,布尔型smoothScroll)中设置smoothScroll = true并不总是具有平滑滚动效果。假设您的viewpager中的页面少于5页,您几乎不会注意到平滑滚动。

在此场景中,最困难的方法是将其放入for循环中

代码语言:javascript
复制
//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() ...

代码语言:javascript
复制
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++;
                    }
                }
            };

:如果有人需要更慢的滚动,他们可以在这个循环中使用睡眠...

代码语言:javascript
复制
@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();

        }
票数 13
EN

Stack Overflow用户

发布于 2012-07-28 18:49:43

也许,如果你想要拖动模拟,你应该看看下面的API ViewPager.beginFakeDrag()ViewPager. fakeDragBy(float offset)ViewPager.endFakeDrag()。此外,setCurrentItem() API还提供了设置当前页面并顺利完成该操作的功能。我建议自动制作幻灯片的最简单的方法是用简单的Runnable设置Handler,它会调用分页方法来设置活动中的项目,并为它做postDelayed()。别忘了在用户交互或活动暂停时调用removeCallbacks()。

票数 11
EN

Stack Overflow用户

发布于 2019-05-02 20:11:28

使用TimerTask扩展First Create Slider类

代码语言:javascript
复制
public class SliderTimer extends TimerTask {
    private ViewPager viewPager;
    private int size;
    private Activity activity;

    public SliderTimer(ViewPager viewPager, int size, Activity activity) {
        this.viewPager = viewPager;
        this.size = size;
        this.activity = activity;
    }

    @Override
    public void run() {
        activity.runOnUiThread(() -> {
            if (viewPager.getCurrentItem() < size - 1) {
                viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
            } else {
                viewPager.setCurrentItem(0, true);
            }
        });
    }
}

接下来创建用于慢速滚动的SpeedSlowScroller

代码语言:javascript
复制
public class SpeedSlowScroller extends Scroller {

    private int mDuration = 2500;

    public SpeedSlowScroller(Context context) {
        super(context);
    }

    public SpeedSlowScroller(Context context, Interpolator interpolator) {
        super(context, interpolator);
    }

    public SpeedSlowScroller(Context context, Interpolator interpolator, boolean flywheel) {
        super(context, interpolator, flywheel);
    }


    @Override
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
        // Ignore received duration, use fixed one instead
        super.startScroll(startX, startY, dx, dy, mDuration);
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy) {
        // Ignore received duration, use fixed one instead
        super.startScroll(startX, startY, dx, dy, mDuration);
    }
}

最后将SpeedSlowScroller添加到ViewPager中,并将SliderTimer添加到自动滚动中

代码语言:javascript
复制
try {
 Field mScroller = ViewPager.class.getDeclaredField("mScroller");
 mScroller.setAccessible(true);
 SpeedSlowScroller scroller = new SpeedSlowScroller(_context);
 mScroller.set(your_viewpager, scroller);
 Timer timer = new Timer();
 timer.scheduleAtFixedRate(new SliderTimer(your_viewpager, models.size(), activity), 4000, 6000);
 } catch (Exception ignored) {
 }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11698987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档