当页面在viewpager android中滚动时,是否更新postdelay秒以使其可运行?

当页面在viewpager android中滚动时,是否更新postdelay秒以使其可运行?,android,android-viewpager,runnable,postdelayed,Android,Android Viewpager,Runnable,Postdelayed,我正在使用viewpager显示图像,图像将在20秒后自动更改每20秒自动更改图像工作正常,但如果用户手动滚动寻呼机并在20秒后显示下一个图像,我希望重置处理器延迟时间 当前工作: 如果我在显示图像的viewpager的第一个位置,则此图像时间为20秒 10秒后,若我滚动页面,则下一个图像显示时间仅为10秒,但应显示20000秒 如何更新下一个图像显示的后期延迟时间 检查下面的代码我已经尝试过 onpageselected我再次设置了post延迟,但它没有工作 谢谢 final int []sl

我正在使用viewpager显示图像,图像将在20秒后自动更改每20秒自动更改图像工作正常,但如果用户手动滚动寻呼机并在20秒后显示下一个图像,我希望重置处理器延迟时间

当前工作: 如果我在显示图像的viewpager的第一个位置,则此图像时间为20秒 10秒后,若我滚动页面,则下一个图像显示时间仅为10秒,但应显示20000秒

如何更新下一个图像显示的后期延迟时间 检查下面的代码我已经尝试过

onpageselected我再次设置了post延迟,但它没有工作

谢谢

final int []sliderImageArray={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e};

    runnable = new Runnable()
    {

        //int i=0;
        public void run()
        {   // slider image run

                if(startt)
                {   


                    if(i==0)
                    {   
                     viewPager.setCurrentItem(i,false);
                    } 
                    else
                    {
                        viewPager.setCurrentItem(i,false);
                    }
                    i++;
                    if(i>sliderImageArray.length-1)
                    {
                        i=0;    
                    }

                }
                else
                {

                }

            imagehandler.postDelayed(this, 20000); 
        }

    };
    imagehandler.postDelayed(runnable,20000);

试着这样做

imagehandler.removeCallbacksAndMessages(null);
imagehandler.postDelayed(this, 20000); 

在这里你可以这样做

private int runnableMill = 20000;
现在使用这个对象

imagehandler.postDelayed(runnable, runnableMill);
更新时间

runnableMill = 10000;

在下一次执行时,将使用新值执行线程

您应该在
onPageScrollStateChanged
中调用imagehandler。 因此,如果ViewPager正在调整到下一个位置,请调用
imagehandler.postDelayed
,如果用户正在拖动ViewPager,请调用
imagehandler.removeCallbacks

下面是一个示例实现:

final int[] sliderImageArray = new int[] { R.drawable.a, R.drawable.b,
        R.drawable.c, R.drawable.d, R.drawable.e };
private Runnable imageSliderRunnable = new Runnable() {
    @Override
    public void run() {
        final int itemCount = sliderImageArray.length;
        final int currentItem = viewPager.getCurrentItem();
        final int nextItem = (currentItem + 1) % itemCount;
        viewPager.setCurrentItem(nextItem, false);
    }
};

private void setupViewPager() {
    this.viewPager
            .setOnPageChangeListener(new SimpleOnPageChangeListener() {
                @Override
                public void onPageScrollStateChanged(int state) {
                    switch (state) {
                    case ViewPager.SCROLL_STATE_DRAGGING:
                        imagehandler.removeCallbacks(imageSliderRunnable);
                        break;
                    case ViewPager.SCROLL_STATE_SETTLING:
                        imagehandler.removeCallbacks(imageSliderRunnable);
                        imagehandler.postDelayed(imageSliderRunnable, 20000);
                        break;
                    }
                }
            });
    imagehandler.postDelayed(imageSliderRunnable, 20000);
}
如果将暂停封闭的活动或片段,请不要忘记从处理程序中删除回调

@Override
public void onResume() {
    super.onResume();
    setupViewPager();
}

@Override
public void onPause() {
    imagehandler.removeCallbacks(imageSliderRunnable);
    super.onPause();
}

如果我设置了他的onpage change listener,它会给我错误,比如类型处理程序中的方法postDelayed(Runnable,long)不适用于参数(new ViewPager.OnPageChangeListener(){},int)hi@Override public void onPageSelected(int arg0){i=arg0;runnableMill=20000;imagehandler.postDelayed(runnable,runnableMill);Log.d(“onpageselected”、“------>”+arg0);}我使用了类似于当前滚动图像的内容来显示正确的时间,但是当autoscroll工作时,它将需要其他时间。您需要在所有的后期延迟中使用此对象,并且当您想要更改时间时,首先调用removeCallback(runnable)然后调用postdelay方法抱歉,我尝试了这个方法,但对于下一个图像是工作的,在该时间之后,持续时间自动更改为不工作
@Override
public void onResume() {
    super.onResume();
    setupViewPager();
}

@Override
public void onPause() {
    imagehandler.removeCallbacks(imageSliderRunnable);
    super.onPause();
}