我想做一个简单的游戏,有一个图像视图和两个按钮来猜测该卡是否为黑色。
我想使用一个线程,在玩家按下按钮之前每隔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秒,就像我想要的那样:)
我该怎么办呢?
答案 0 :(得分: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);
答案 1 :(得分:0)
您正在做的事情会带来一些不确定性。我不确定具体的实施方式,但如果isInterrupted()
返回true
并且您致电sleep(5000)
,则可能会立即抛出InterruptedException
而没有任何睡眠。主线程中的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上找到Animation and Graphics的指南。
使用这些按钮时,您可以停止动画,单击按钮并使用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);
}