在PageViewer中自动滚动

use*_*569 1 android

我的网页浏览器有问题.我希望我的页面每两秒滚动一次.我尝试这样的事情:

handler.postDelayed(new Runnable() {
    public void run() {

        viewPager.setCurrentItem(viewPager.getCurrentItem()+1, true);

    } 
},2000);
Run Code Online (Sandbox Code Playgroud)

但它只有在我开始活动时才有效.如果我把这个代码放到public void onPageSelected(int page)它的工作,但我想做,当我点击并手动滚动页面我想停止这个处理程序,但它无法正常工作.我怎么能这样做?

Dam*_*ian 10

您应该像这样定义Runnable和Handler:

private boolean pagerMoved = false;
private static final long ANIM_VIEWPAGER_DELAY = 2000;

private Handler h = new Handler();
    private Runnable animateViewPager = new Runnable() {
        public void run() {
            if (!pagerMoved) {
                viewPager.setCurrentItem(viewPager.getCurrentItem()+1, true);
                h.postDelayed(animationFrame, ANIM_VIEWPAGER_DELAY);
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

确保在onPause和onResume方法中设置和拆除

@Override
    public void onPause() {
        super.onPause();
        if (h != null) {
            h.removeCallbacks(animateViewPager);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        h.postDelayed(animateViewPager, ANIM_VIEWPAGER_DELAY);
    }
Run Code Online (Sandbox Code Playgroud)

最后,您需要在viewpager上侦听触摸事件,以便可以将pagerMoved设置为true(然后将停止进一步的自动页面转换).

  • 是的,你需要查看ViewPager上的fakePageDrag方法 (2认同)