2012-12-27 123 views
0

我想在按下按鈕時更改文本視圖的背景顏色。它應該這樣做:首先是白色10ms,然後是正常的顏色。是否有某種延遲函數,或者是否需要使用循環或某種類型爲此編寫自己的函數?任何提示,非常感謝:)延遲更改顏色

在這一刻我只是用

button.setBackgroundColor(Color.parseColor("#ffa500")); 
+1

你可以在這裏找到一些可能性:http://stackoverflow.com/questions/3072173/how-to-call-a-method-after -a延遲 –

回答

6

每查看有postpostDelayed方法分別發佈一個可運行的UI線程或張貼延遲它。

button.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
    // change color in here 
    } 
}, 10); 

編輯:

int currentColor; 
private Runnable changeColorRunnable = new Runnable() { 

    @Override 
    public void run() { 
     switch(currentColor){ 
     case Color.RED: currentColor = Color.BLACK; break; 
     case Color.BLACK: currentColor = Color.RED; break; 
     } 
     button.setBackgroundColor(currentColor); 

    } 
}; 

然後:

button.postDelayed(changeColorRunnable, 10); 
如果你要非常頻繁地調用這個,你甚至可以更好地與像這樣做

這將避免不必要的對象創建和垃圾回收

+0

太棒了!這樣做!其實很簡單:D –

+1

嘿謝謝。我甚至用更好的方式更新了我的答案。這有點不那麼簡單,但是,你說它會經常被調用,所以你可以用這種方式來使用更少的內存。 – Budius

+0

正如信息,我是新的android編程,但爲什麼這會使用更少的內存?它確實調用run方法嗎? –

0
private class ButtonColorChange extends AsyncTask<String, Void, String> 
{ 
    protected void onPreExecute() 
    { 
     //do 
    } 

    protected String doInBackground(String... params) 
    { 
     try 
     { 
      Thread.sleep(10000); //waiting here   
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onPostExecute(String result) 
    { 
     button.setBackgroundColor(Color.parseColor("#ffa500")); 
    } 
} 

使用這種方法,只要你點擊鏈接爲

ButtonColorChange btc = new ButtonColorChange(); 
btc.execute(); 
+0

這是一個非常糟糕的做法。這樣你就爲GC創建了一個新的對象來清理,這個對象除了運行一個睡眠的線程外什麼都不會做。 'View.postDelayed(Runnable,long)'方法是一種更好的方法,因爲runnable是一個小得多的對象,可以根據需要重複使用多次,並且不需要讓線程休眠。 – Budius