1

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

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

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

    } 
},2000);

但它仅在我开​​始活动时才有效。如果我将此代码放入public void onPageSelected(int page)它可以工作,但我想在单击并手动滚动页面时执行此操作,我想停止此处理程序,但它不起作用。我怎么能这样做?

4

1 回答 1

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

确保在 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);
    }

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

于 2012-06-01T10:26:53.420 回答