我正在使用viewpager显示图像,并且图像将在20秒后自动更改,每20秒自动更改图像完美工作但我想重置处理程序后延时间,如果用户手动滚动寻呼机,下一图像应显示20秒
当前工作: 如果我在viewpager的第一个位置显示图像,则此图像时间为20秒 10秒后如果我滚动下一个图像显示只有10秒但它应该显示20000秒
如何更新下次图像显示的延迟时间 检查下面代码我试过的。
onpageselected我已经设置了延迟但是没有工作
由于
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) {
}
});
答案 0 :(得分:2)
您应该在onPageScrollStateChanged
中调用imagehandler。
如果ViewPager正在处理到下一个位置,请致电imagehandler.postDelayed
,如果用户ViewPager Scroll-States正在拖动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);
}
如果暂停包含Activity或Fragment,请不要忘记从处理程序中删除回调。
@Override
public void onResume() {
super.onResume();
setupViewPager();
}
@Override
public void onPause() {
imagehandler.removeCallbacks(imageSliderRunnable);
super.onPause();
}
答案 1 :(得分:0)
尝试这样做
imagehandler.removeCallbacksAndMessages(null);
imagehandler.postDelayed(this, 20000);
答案 2 :(得分:0)
你可以这样做
private int runnableMill = 20000;
现在使用此对象
imagehandler.postDelayed(runnable, runnableMill);
更新时间
runnableMill = 10000;
在下一次执行时,它将使用新值来执行你的线程