我在Android中制作了一个拥有1个ImageView和4个图像和按钮的游戏。我设置了ImageView,以便在其中放置随机图像,并在经过这么长时间后显示新的随机图像。我需要找到一种方法,在更改不锁定UI的图像之间设置延迟。这是相关的代码。
public class MainGameActivity extends Activity {
int points = 0, score = 0, timer = 1000;
ImageView imgView = (ImageView)findViewById(R.id.image);
Random randy = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_game_activity);
while(points >= 0) {
changeImage();
//Timer goes here
}
}
private void changeImage() {
int randyInt = randy.nextInt(4);
if (randyInt == 0){
imgView.setImageDrawable(getResources().getDrawable(R.drawable.cheese));
} else if (randyInt == 1) {
imgView.setImageDrawable(getResources().getDrawable(R.drawable.worm1));
} else if (randyInt == 2) {
imgView.setImageDrawable(getResources().getDrawable(R.drawable.worm2));
} else if (randyInt == 3) {
imgView.setImageDrawable(getResources().getDrawable(R.drawable.minnow));
}
}
}
4个按钮使用与ImageView相同的drawable。当按下按钮时,ImageView中的drawable和Image按钮中的drawable被检查是否等效,因此UI仍然必须工作,而包含更改ImageView drawable的暂停的while循环仍在运行。感谢您提供的任何帮助。
答案 0 :(得分:0)
听起来你需要一个计时器。 有人问过并回答过。请查看此stackoverflow回答Android timer? How-to?
答案 1 :(得分:0)
您也可以尝试使用Switch案例而不是所有ifs
Switch(randyInt){
case 1:imgView.setImageDrawable(getResources().getDrawable(R.drawable.cheese));
break;
case 2:imgView.setImageDrawable(getResources().getDrawable(R.drawable.worm1));
break;
case 3:imgView.setImageDrawable(getResources().getDrawable(R.drawable.worm2));
break;
case 4:imgView.setImageDrawable(getResources().getDrawable(R.drawable.minnow));
break;
default:imgView.setImageDrawable(getResources().getDrawable(R.drawable.cheese));
break;
}
答案 2 :(得分:0)
你可以使用他的答案中指出的Lasse之类的定时器。首先,您需要声明它:
private CountDownTimer timer;
然后在你的onCreate
中你可以调用计时器(在这个例子中,我每5秒钟更换一次图像(5000毫秒),但你可以根据需要更改它):
timer = new CountDownTimer(5000, 20) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
try{
callImage();
}catch(Exception e){
}
}
};
然后在callImage
方法中,在imageView上设置图像并再次启动计时器:
private void callImage(){
int randyInt = randy.nextInt(4);
if (randyInt == 0){
imgView.setImageDrawable(getResources().getDrawable(R.drawable.cheese));
} else if (randyInt == 1) {
imgView.setImageDrawable(getResources().getDrawable(R.drawable.worm1));
} else if (randyInt == 2) {
imgView.setImageDrawable(getResources().getDrawable(R.drawable.worm2));
} else if (randyInt == 3) {
imgView.setImageDrawable(getResources().getDrawable(R.drawable.minnow));
}
try{
imgView.post(new Runnable() {
@Override
public void run() {
timer.start();
}
});
}catch(Exception e){
Log.e("Error", "Error: " + e.toString());
}
}
因此,每5秒(或您需要的时间)它将更改图像,并且不会阻止UI。
希望它有所帮助!