2011-05-08 94 views
0

我有一个“活动”三个图像。当单击一个图像时,所有图像将切换到另一个图像。有没有办法让这些开关在图像实际改变之前有2秒延迟(即下面每个'for循环'中的2秒延迟)?我试图用计时器来做到这一点,但是当我运行我的程序,它实际上并不对延迟:如何设置的图像与延迟

protected void onCreate(Bundle savedInstanceState) { 
image1.setOnClickListener(this); 

@Override 
public void onClick(View arg0) 
{ 
do_switches(); 
} 

private void do_switches() 
{ 
//loop through all images and change them 
for(int j=1 ;j<=3; j++) 
{   


final int curr2=current; 
final Handler handler = new Handler(); 
Timer t = new Timer(); 
t.schedule(new TimerTask() { 
     public void run() { 
     handler.post(new Runnable() { 
       public void run() { 

     switch(curr2){ 

     case 1: 

      image1.setImageResource(ImageArray[1]); 
        break; 

     case 2: 

      image2.setImageResource(ImageArray[2]); 
          break; 

     case 3: 
      image3.setImageResource(ImageArray[3]); 
         break; 

     } 
      } 
     }); 
    } 
}, 2000); 
} 

}

我也只用SystemClock.sleep(2000)也试图代替计时器,但我也没有工作。我也尝试设置一个线程与try/catch没有运气,也许我没有正确实施它。有没有办法在我for循环的每次迭代中放置这个延迟? 感谢

回答

0

最好的选择不是一个,但你仍然可以尝试CountDownTimer。

http://developer.android.com/reference/android/os/CountDownTimer.html

+1

真棒!..这个工作perfectly..thanks – Tobi 2011-05-11 00:27:24

+0

我首先存储图像序列中的阵列,以改变当时我使用倒数计时器真正改变的图像。但是当我将我的间隔设置为少量(小于〜2000毫秒)时,它会错过我阵列中最后的1或2个插槽。你知道这可能是什么原因吗? – Tobi 2011-05-18 01:37:09

0

您可以使用handler.postDelayed(Runnable的R,长timeInMillis)。让你的runnable改变图片,然后调用postDelayed()并传递可运行时间和2000时间延迟。

编辑:啊我看到你正在尝试做的。据我所知,你每次都不能进行循环暂停2秒。如果您链接postDelayed()调用,您可以获得相同的效果。刚刚成立的下一可运行并在其上调用postDelayed()的第一个里面,同样从第二个内部的第三个。您将最终获得与每次迭代暂停2秒的for循环相同的功能。

+0

我只是想这样做,你说什么,但我对循环还是转移到即使两秒尚未经过下一次迭代。我如何才能让for循环的当前迭代等待,直到2秒后才能继续? – Tobi 2011-05-09 03:57:49

+0

就我而言,我将尽可能多次调用同一个runnable。我将如何做到这一点? – Tobi 2011-05-18 01:31:38