在for循环中切换按钮可见性

时间:2012-09-01 09:52:21

标签: android multithreading button visible invisible

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

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;随机。它也不会那么快。

4 个答案:

答案 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通道。