我有几个按钮,我想让它们在一段时间内不可见,然后让它们再次变得可见。 Timer.sleep()之前的(View.INVISIBLE)不起作用。我还没弄清楚这一点。有任何想法吗? 谢谢,史蒂夫
private void commonBtnHandler(Button btn) {
try {
btn.setVisibility(View.INVISIBLE);
Thread.sleep(250);
btn.setVisibility(View.VISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
您不应该在UI /主线程上执行Thread.sleep()
。它会导致用户界面冻结& ANR
尝试:
btn.setVisibility(View.INVISIBLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
btn.setVisibility(View.VISIBLE);
}
}, 250);
250 ms
也是一段非常短的时间。
答案 1 :(得分:0)
btn.setVisibility(View.INVISIBLE);
new Thread() {
public void run() {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
btn.setVisibility(View.VISIBLE);
}
});
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
当需要在运行时更改UI时,始终放置runOnUiThread,这对您有所帮助。
答案 2 :(得分:0)
感谢您的所有输入。
我尝试了所有的建议,延迟时间为3000毫秒,但仍然没有看到眨眼。
另外,我想知道我是否阻止了UI线程。我认为INVISIBLE会在sleep()生效之前完成。
总结:我写了一个循环来拨打电话10次。在所有情况下似乎都忽略了延迟。我感谢大家的帮助。看起来我需要重新思考这应该如何运作。我不认为这与游戏程序员如何确保同步操作有很大的不同。
答案 3 :(得分:0)
以另一种方式解决此问题我没有隐藏按钮,而是在setOnTouchListener中使用MotionEvent暂时更改了颜色。按下按钮时,按钮会改变颜色,释放时会恢复原始颜色。效果很好!
mBtn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch ( event.getAction() ) {
case MotionEvent.ACTION_DOWN:
mBtn.setBackgroundColor(getResources().getColor(R.color.colorLightOrange));
break;
case MotionEvent.ACTION_UP:
mBtn.setBackgroundColor(getResources().getColor(R.color.colorOrange));
break;
}
return true;
}
});