我想在按下按鈕時更改文本視圖的背景顏色。它應該這樣做:首先是白色10ms,然後是正常的顏色。是否有某種延遲函數,或者是否需要使用循環或某種類型爲此編寫自己的函數?任何提示,非常感謝:)延遲更改顏色
在這一刻我只是用
button.setBackgroundColor(Color.parseColor("#ffa500"));
我想在按下按鈕時更改文本視圖的背景顏色。它應該這樣做:首先是白色10ms,然後是正常的顏色。是否有某種延遲函數,或者是否需要使用循環或某種類型爲此編寫自己的函數?任何提示,非常感謝:)延遲更改顏色
在這一刻我只是用
button.setBackgroundColor(Color.parseColor("#ffa500"));
每查看有post
和postDelayed
方法分別發佈一個可運行的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);
如果你要非常頻繁地調用這個,你甚至可以更好地與像這樣做
這將避免不必要的對象創建和垃圾回收
太棒了!這樣做!其實很簡單:D –
嘿謝謝。我甚至用更好的方式更新了我的答案。這有點不那麼簡單,但是,你說它會經常被調用,所以你可以用這種方式來使用更少的內存。 – Budius
正如信息,我是新的android編程,但爲什麼這會使用更少的內存?它確實調用run方法嗎? –
最簡單的方式做這將是創建一個處理程序,並與postDelayed執行它: http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable, long)
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();
這是一個非常糟糕的做法。這樣你就爲GC創建了一個新的對象來清理,這個對象除了運行一個睡眠的線程外什麼都不會做。 'View.postDelayed(Runnable,long)'方法是一種更好的方法,因爲runnable是一個小得多的對象,可以根據需要重複使用多次,並且不需要讓線程休眠。 – Budius
你可以在這裏找到一些可能性:http://stackoverflow.com/questions/3072173/how-to-call-a-method-after -a延遲 –