简体   繁体   English

在ViewPager Android中滚动页面时更新可运行的postdelay秒?

[英]Update postdelay seconds for runnable when page scrolled in viewpager android?

i am displaying images using viewpager and that images will be automatically change after 20 seconds automatically changes images every 20 seconds work perfectly but i want to reset handler postdelayed time if user manually scroll pager and next image should be display 20 seconds 我正在使用viewpager显示图像,并且图像将在20秒后自动更改,每20秒自动更改图像,效果完美,但是我想重置处理程序的后延迟时间,如果用户手动滚动寻呼机,则下一个图像应显示20秒

Current Working : if i am on the first position of viewpager for display image this image time is 20 seconds after 10 seconds if i scrollpage than next image is display is only 10 seconds but it should be display 20000 seconds 当前工作:如果我在显示图像的Viewpager的第一个位置上,则此图像时间是10秒后的20秒,如果我滚动显示的图像比下一张图像仅10秒,但应显示20000秒

how to update post delayed time for next image display check below code what i have tried. 如何更新下一个图像显示的发布延迟时间检查以下代码我尝试了什么。

onpageselected i have set again post delayed but it was not worked onpageselected我已经设置了再次发布延迟,但是没有用

Thanks 谢谢

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

.

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {


                i=arg0;
                imagehandler.postDelayed(runnable, 20000);
                Log.d("onpageselected","----->"+arg0);

            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {


            }
        });

You should call the imagehandler in onPageScrollStateChanged . 您应该在onPageScrollStateChanged中调用onPageScrollStateChanged So call imagehandler.postDelayed if the ViewPager is in the process of settling to the next position and call imagehandler.removeCallbacks if the ViewPager is being dragged by the user ViewPager Scroll-States . 于是呼imagehandler.postDelayed如果ViewPager是在解决到下一个位置和通话过程imagehandler.removeCallbacks如果ViewPager被用户拖动ViewPager滚动-国

Here is an example implementation: 这是一个示例实现:

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

Don´t forget to remove the callbacks from the handler if enclosing Activity or Fragment will be paused. 如果封闭了Activity或Fragment,则不要忘记从处理程序中删除回调。

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

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

Try do this 试试这个

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

Here you can do like this way 在这里你可以这样

private int runnableMill = 20000;

now use this object 现在使用这个对象

imagehandler.postDelayed(runnable, runnableMill);

update time 更新时间

runnableMill = 10000;

On the next execution it will be use new value to execute your thread 在下一次执行时,将使用新值执行您的线程

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 滚动页面时滚动ViewPager的RecyclerView - Scroll ViewPager's RecyclerView when page gets scrolled 滚动ViewPager时,Android同步为Image View设置动画 - Android animate Image View synchronously when ViewPager is scrolled android,当在viewpager中滚动recyclerview时,如何使父scrollview滚动到顶部 - android when recyclerview in a viewpager is scrolled, how to top parent scrollview scroll 我只能为此Android运行一个可运行的设备,以允许postdelay仅在一种方法上工作吗? - can I only have one runnable for this android that will allow postdelay to work only on a method? 滚动页面后无法重置ViewPager内容 - ViewPager content not able to reset after page scrolled 如何在postDelay中停止Runnable Handler - How can I stop Runnable Handler in postDelay 如何在水平回收视图上实现垂直滚动,并在水平回收视图上滚动时阻止移动到viewpager的下一页 - How to achieve vertical scrolling on a horizontal recyclerview and blocking moving to next page of viewpager when scrolled on horizontal recycler view 将listview滚动时,viewpager固定在活动顶部 - viewpager fixed to top of activity when listview scrolled 更改页面后,Android ViewPager AsyncTask完成 - Android viewpager AsyncTask finish when page changed 更改页面时不调用android ViewPager onCreateVew() - android ViewPager onCreateVew() not call when change page
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM