Android 如何在我的应用程序中设置暂停而不锁定应用程序

Android 如何在我的应用程序中设置暂停而不锁定应用程序,android,Android,我正在用Android做一个游戏,有1个ImageView和4个图像和按钮。我设置了ImageView,以便在其中放置一个随机图像,并在经过这么长时间后显示一个新的随机图像。我需要找到一种方法,在更改图像之间设置一个不会锁定UI的延迟。以下是相关的代码 public class MainGameActivity extends Activity { int points = 0, score = 0, timer = 1000; ImageView imgView = (Ima

我正在用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相同的绘图工具。按下按钮时,会检查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());
    }

}