0

我想做一个简单的游戏,有一个图像视图和两个按钮来猜测卡片是红色还是黑色。

我想使用一个线程,在玩家按下按钮之前每 0.1 秒,卡片就会发生变化。

这是我到目前为止使用的:

Thread timer = new Thread() {
        public void run() {
            while (true) {
                try {
                    if(!isInterrupted())
                        sleep(100);
                    else
                        sleep(5000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if(!isInterrupted()) {
                                if (iv_card_to_Guess.getDrawable() == null)
                                    iv_card_to_Guess.setImageBitmap(deck_card);
                                else
                                    iv_card_to_Guess.setImageDrawable(null);
                            }
                            else {
//here need to update imageview with the actual image of the card, not just the deck or null
// for example 5 of Hearts

                                loadBitmap(getResourceID("img_" + numbers.get(count).toString(), "drawable", getApplicationContext()), iv_card_to_Guess);
                            }
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }
    };

当我按下按钮时,我打电话timer.interrupt();

该应用程序会更改实际卡片的图像,但也会更改 0.1 秒,而不是 5 秒,就像我想要的那样 :)

请问我该怎么做?

4

2 回答 2

0
     private Timer timer; 
      TimerTask task = new TimerTask() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
          insert the code you want to trigger here.
        }
    };
    timer = new Timer();

    int delay=5000;

    timer.schedule(task, delay); 
于 2015-07-17T12:06:10.790 回答
0

你在做什么引入了一些不确定性。我不确定确切的实现,但是如果isInterrupted()返回true并且您调用sleep(5000)anInterruptedException可能会立即抛出而没有任何睡眠。此外,主线程中的 Runnable 可能会在中断状态被清除之前运行,因此您的卡片看起来像预期的那样,只是在您的 while 循环的下一次迭代中被删除,它只渗透 0.1 秒。

因此,您最好使用 Android 动画来完成闪烁效果

if (iv_card_to_Guess.getDrawable() == null)
    iv_card_to_Guess.setImageBitmap(deck_card);
else
    iv_card_to_Guess.setImageDrawable(null);

最好介绍两种startAnimation()方法stopAnimation。您可以在 Android 上找到有关动画和图形的指南。

有了这些,您可以在单击按钮时停止动画并再次启动它,View.postDelayed(run, delay)从而为您的卡片提供 5 秒的曝光时间。

public void onClick(View v) {
    stopAnimation();
    loadBitmap(getResourceID("img_" + numbers.get(count).toString(), "drawable", getApplicationContext()), iv_card_to_Guess);
    iv_card_to_Guess.postDelayed(new Runnable() {
        startAnimation();
    }, 5000);
}
于 2015-07-18T09:39:12.397 回答