2012-05-08 179 views
1

我无法理解这个java代码。我想让图像闪烁几次,并延迟一段时间。图像闪烁一次即可。有人能给我一个解释会很棒!循环不起作用,为什么会出现这种情况?

private void RunAnimations(int[]melodiTakten) { 

    for (int i = 0; i < 4; i++) { 

     ImageView markeringspilen = (ImageView) findViewById(R.id.markeringspil); 
     markeringspilen.setVisibility(View.VISIBLE); 
     markeringspilen.postDelayed(new Runnable() { 
      public void run() { 
       ImageView markeringspilen = (ImageView) findViewById(R.id.markeringspil); 

       markeringspilen.setVisibility(View.INVISIBLE); 
      } 
     }, 2000); 

    } 
+1

你是如何期待*它的工作?您正在循环,将其设置为可见四次,但还要添加四次*延迟*操作以使其不可见。这些延迟行动将在四个“使其可见”行动后发生。所以你可以看到它四次,然后隐藏四次。你为什么想这么做? –

回答

1

如果我理解你的想法是正确的,那么你的实现是错误的,因为它会将延迟操作设置为同时发生。你可以空出来是这样的:

for (int i = 0; i < 4; i++) { 
    markeringspilen.postDelayed(new Runnable() { 
     public void run() { 
      ImageView markeringspilen = (ImageView) findViewById(R.id.markeringspil); 
      markeringspilen.setVisibility(View.VISIBLE); 
     } 
    }, 4000*i); 
    markeringspilen.postDelayed(new Runnable() { 
     public void run() { 
      ImageView markeringspilen = (ImageView) findViewById(R.id.markeringspil); 
      markeringspilen.setVisibility(View.INVISIBLE); 
     } 
    }, 4000*i+2000); 
} 

这个循环设置八个延迟可见性的变化 - 一组四对设置为4000*i可见,接着在集隐形4000*i+2000

+0

啊,好的。非常感谢 – Andreas

0

该循环被执行,但它执行得非常快,你看不到它。你应该在循环中放一些延迟,而不仅仅是在可运行的时候。

0

这是因为您连续四次呼叫setVisibility(View.VISIBLE),然后在延迟2秒后四次setVisibility(View.INVISIBLE)

您需要做的是添加八个可运行的程序,这些程序会不断增加延迟,从而切换可见性。

相关问题