Android 如何在我的应用程序中设置暂停而不锁定应用程序
我正在用Android做一个游戏,有1个ImageView和4个图像和按钮。我设置了ImageView,以便在其中放置一个随机图像,并在经过这么长时间后显示一个新的随机图像。我需要找到一种方法,在更改图像之间设置一个不会锁定UI的延迟。以下是相关的代码Android 如何在我的应用程序中设置暂停而不锁定应用程序,android,Android,我正在用Android做一个游戏,有1个ImageView和4个图像和按钮。我设置了ImageView,以便在其中放置一个随机图像,并在经过这么长时间后显示一个新的随机图像。我需要找到一种方法,在更改图像之间设置一个不会锁定UI的延迟。以下是相关的代码 public class MainGameActivity extends Activity { int points = 0, score = 0, timer = 1000; ImageView imgView = (Ima
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相同的绘图工具。按下按钮时,会检查ImageView中的drawable和Image按钮中的drawable是否等效,因此UI仍必须工作,而包含更改ImageView drawable暂停的while循环仍在运行。谢谢您的帮助。听起来您需要一个计时器。
这已经被问到和回答了。请查看此stackoverflow答案您也可以尝试使用开关盒而不是所有这些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;
}
你可以像他回答的那样使用计时器。首先,您需要声明:
private CountDownTimer timer;
然后在您的onCreate
中,您可以调用计时器(在本例中,我每5秒(5000ms)更改一次图像,但如果需要,您可以更改它):
然后在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
希望有帮助
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());
}
}