原本想一点按钮就该按钮就变成绿色,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);
}
});
为什么一点按钮该按钮就直接变成了红色,没有经历绿色阶段?
buttonChange.setOnClickListener(new OnClickListener(){
public void onClick(View v){
buttonChange.setBackgroundColor(Color.GREEN);
try{
Thread.sleep(1000);
}catch(InterruptedException e){}
buttonChange.setBackgroundColor(Color.RED);
}
});
解决方案 »
- Android 2.3 position: fixed; onclick事件失效!
- 在android应用中嵌入AdMob广告的方案
- 求救(十万火急):ubuntu10.10(32位)编译android源码问题
- 兄弟姐妹们,谁知道我这个ANDROID本地解析XML的程序哪错了?
- 我想自学android,要学多久或者什么程度才可以找一份工作。
- 适合做课程设计的android项目
- android4.4添加照片小部件选择相册,再插入USB打开USB存储设备,断开USB后,照片小部件一直显示没有照片
- 新手遇到一个大问题!关于intent打开新窗口的。
- Android 自定义progressdialog 单例模式下无法加载动画相关问题(40分)
- android如何通过usb向电脑发送文件?
- eclipse building 卡住
- LOGE的信息输出到哪里了?
按钮没有变成绿色的原因在于,楼主的代码Thread.sleep(1000);阻塞了线程。
而楼主阻塞的线程正好是UI线程。正是UI线程负责把按钮画成绿色的,但是,偏偏楼主把它阻塞掉了,那么它当然无法把按钮刷成绿色了。
当Thread.sleep(1000);执行结束后,紧接着,又执行了buttonChange.setBackgroundColor(Color.RED);很明显的,这个操作覆盖了之前的buttonChange.setBackgroundColor(Color.GREEN);
操作。
所以,结果就是,楼主看到界面卡住了1秒钟以后,按钮变成了红色,中间没有绿色出现。
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);
}
};
}