它必须有效,但不起作用。当我启动应用程序时,我看到一个按钮。现在我希望按钮可见且不可见。
for (k = 0; k < abc.length; ++k) {
try {
if (k%2 != 0) {
button.setVisibility(View.VISIBLE);
} else {
button.setVisibility(View.GONE);
}
Thread.sleep(sleepMilliseconds);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
或者for循环如此之快,以至于android无法显示它? 什么都没发生。我看到了按钮。
我有一个Thread.sleep()。睡眠毫秒是例如100,300 - &gt;随机。它也不会那么快。
答案 0 :(得分:3)
我有一个Thread.sleep()。睡眠毫秒是例如100,300 - &gt;随机。它也不会那么快。
你在UI线程中正在睡觉。那就是问题所在。你不会让其余的UI线程完成它的工作。
如果您想定期更新UI,则应该使用计时器,或者在每次更新结束时调用Handler.postDelayed
,以安排下一次更新。或者,使用Property Animation system。
答案 1 :(得分:1)
WebnetMobile.com和Jon Skeet是对的;你应该使用计时器或动画来达到你想要的效果;
但如果你真的想按照自己的方式做到这一点,那么按照以下步骤做:
for (k = 0; k < abc.length; ++k) {
try {
if (k%2 != 0) {
button.setVisibility(View.VISIBLE);
Thread.sleep(sleepMilliseconds);
} else {
button.setVisibility(View.GONE);
Thread.sleep(sleepMilliseconds);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
并让那些毫秒超过500毫秒的人看到它们
答案 2 :(得分:1)
试试这个,希望能帮到你..
声明一个类变量,并在您的活动类
中添加此类和此方法//variabe
boolean b;
//class
class RefreshHandler extends Handler {
@Override
public void handleMessage(Message msg) {
_yourActivity.this.updateUI();
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
public void stop(){
super.sendEmptyMessage(0);
}
}
和
//method
public void updateUI() {
if (b) {
button.setVisibility(View.VISIBLE);
b=false;
} else {
button.setVisibility(View.GONE);
b=true;
}
mRedrawHandler.sleep(1000);
}
然后使用它来启动按钮的可见性隐身
mRedrawHandler = new RefreshHandler();
updateUI1();
您可以使用
停止此操作mRedrawHandler.removeMessages(0);
答案 3 :(得分:0)
如果要使按钮闪烁,请在其上应用动画,即更改Alpha通道。