2012-05-08 86 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)

您需要做的是添加八個可運行的程序,這些程序會不斷增加延遲,從而切換可見性。

相關問題