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