原本想一点按钮就该按钮就变成绿色,1秒钟后变成红色,但是下面代码
为什么一点按钮该按钮就直接变成了红色,没有经历绿色阶段?
buttonChange.setOnClickListener(new OnClickListener(){
         public void onClick(View v){
         buttonChange.setBackgroundColor(Color.GREEN);
         try{
         Thread.sleep(1000);
         }catch(InterruptedException e){}
         buttonChange.setBackgroundColor(Color.RED);
             }
        });

解决方案 »

  1.   

    你这代码写的肯定是有问题的你可以通过一个线程来计时  然后1秒后通过Handler来改变Button颜色
      

  2.   

        使用Handler不一定需要开线程啊,使用Handler.sendMessageDelayed()就能实现定时了。
      

  3.   

    另外,其实,楼主的代码并没有写错的,起码正常情况下不会发生异常。
         按钮没有变成绿色的原因在于,楼主的代码Thread.sleep(1000);阻塞了线程。
         而楼主阻塞的线程正好是UI线程。正是UI线程负责把按钮画成绿色的,但是,偏偏楼主把它阻塞掉了,那么它当然无法把按钮刷成绿色了。
        当Thread.sleep(1000);执行结束后,紧接着,又执行了buttonChange.setBackgroundColor(Color.RED);很明显的,这个操作覆盖了之前的buttonChange.setBackgroundColor(Color.GREEN);
     操作。
         所以,结果就是,楼主看到界面卡住了1秒钟以后,按钮变成了红色,中间没有绿色出现。
     
      

  4.   

    package test.tmp;import android.app.Activity;public class TmpActivity extends Activity {

    private Button btn;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); btn = (Button) this.findViewById(R.id.btnChange);
    btn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    btn.setBackgroundColor(Color.GREEN);
    mHandler.sendEmptyMessageDelayed(0,1000);
    }
    });
    }

    private Handler mHandler = new Handler(){
    @Override
    public void handleMessage(Message msg)
    {
    btn.setBackgroundColor(Color.RED);
    }
    };
    }
      

  5.   

    使用handler 来完成你的操作。