0

它必须工作,但不工作。当我启动应用程序时,我看到一个按钮。现在我希望该按钮可见和不可见。

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 -> 随机的。也不能这么快。

4

4 回答 4

3

我有一个 Thread.sleep()。睡眠毫秒是例如 100、300 -> 随机的。也不能这么快。

您正在UI 线程中睡觉。那就是问题所在。您不会让 UI 线程的其余部分完成其工作。

如果您想定期更新 UI,您应该改用计时器,或者可能Handler.postDelayed在每次更新结束时调用,以安排下一次更新。或者,使用属性动画系统

于 2012-09-01T09:53:57.677 回答
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 多毫秒内直观地看到它们

于 2012-09-01T10:02:37.420 回答
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);
于 2012-09-01T10:06:11.160 回答
0

如果您想闪烁您的按钮,请在其上应用动画,即更改 Alpha 通道。

于 2012-09-01T09:55:28.677 回答