原本想一点按钮就该按钮就变成绿色,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);
}
});
解决方案 »
- 程序一旦 new socket("10.0.2.2",8888),程序就提示unfortunately myan20130425 has stop,请教各位高手
- 菜鸟求帮助~关于安卓UI
- 用Intent去调用一个类,不成功,log里多了一个 / ,为什么?
- eclipse 导入工程错误
- 不同密度屏幕的布局问题
- android控制台命令
- 启动画面和乱码问题
- 自己不会美工,怎么搞才能漂亮点?
- Android应用代码实现拦截网络请求流量,修改请求信息
- Android App 全屏模式下系统输入法显示时会连同系统虚拟键盘也显示,如何让系统虚拟键盘不显示
- 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);
}
};
}