[英]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.