如何在不锁定应用程序的情况下在我的应用程序中设置暂停

时间:2014-03-27 18:28:41

标签: android

我在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循环仍在运行。感谢您提供的任何帮助。

3 个答案:

答案 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。

希望它有所帮助!