0

我想在按下按钮时更改文本视图的背景颜色。它应该这样做:首先是白色 10 毫秒,然后是常规颜色。是否有某种延迟功能,或者我是否需要使用循环或某种方式为此编写自己的功能?非常感谢任何提示:)

此时我只是使用

button.setBackgroundColor(Color.parseColor("#ffa500"));
4

3 回答 3

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);

这将避免不必要的对象创建和垃圾收集

于 2012-12-27T10:38:48.260 回答
1

最简单的方法是创建一个处理程序并使用 postDelayed 执行它:http: //developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable, long)

于 2012-12-27T10:38:39.207 回答
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();
于 2012-12-27T10:39:29.823 回答