在Android中的线程中动态更改按钮背景

时间:2011-10-30 12:04:26

标签: android

我正在开发我的第一个Android应用程序,它应该是一个游戏。一切都很好,但有一件事我无法解决。

在我的游戏的“主要”活动中(不是应用程序启动时启动的第一个活动)我希望有一个方法可以启动一个更改按钮背景颜色/图像的线程(因为我还没有制作颜色)只有一秒钟的任何图像然后将其转回。我不是方法也有一个整数参数,使它执行这n次。我希望能够像changeButtons(5);那样打电话,它会将按钮x背景蓝色旋转1秒钟,然后等待1秒钟5次。

所以实际上我正在尝试创建一个在运行期间运行的“主”线程,并且在该线程内部我将在某些条件为真时运行此方法(一个调用线程的线程)。

所以我有2个问题。第一个是“这可能吗?”如果是这样,有人可以告诉我该怎么做(当然不是全部,但至少帮助我开始)?特别是我想知道我是否可以在一个线程中更改按钮背景颜色,如果是这样,有人可以告诉我如何编写/让我开始该线程?

第二个问题是后续行动,如果你能做到这一点,你是否可以像boolean b那样,如果有人按下按钮并且线程可以“注意到”这种变化,那么它会变为真?例如,如果线程正在运行并且奥巴马按下按钮x并且b在方法OnClick(View v)中变为“真”,我可以在我的主要内部使用if(b == true){Obama.moon();}并且奥巴马将会登月吗?

1 个答案:

答案 0 :(得分:4)

当然可以。

在android中,您可以使用Handler类(example available)将操作发布到事件队列。你可以这样做:

final Handler handler = new Handler();
final Runnable updateRunner = new Runnable() {
    public void run() {
        // we are now in the event handling so to speak,
        // so go ahead and update gui, set color of button for instance
    }
};
new Thread(new Runnable() {
    public void run() {
       while (condition) {
           SystemClock.sleep(1000);
           handler.post(updateRunner);
       }
   }
}).start();

这将每秒触发updateRunner中的run


关于你的跟进,它也可以完成(当然:))。例如,您可以为处理按钮x的类实现一个可观察的模式。按下后,通过observers.updateChange(b)之类的信息通知观察者  您以前在主线程中有thatClassOverThere.registerObserver(this)的地方。