Sleep function in android program

本秂侑毒 提交于 2019-12-09 00:28:55

问题


Having some problem getting my program to sleep What im trying to do is when the btnStart is pressed firs randomly set pictures to 12 ImageButtons Then i want it to pause for 5 secs and then change the first ImageButton to another picture

My code looks like this, right now it pauses straight away when the button is pressed...

       btnStart.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View v) {
            // TODO Auto-generated method stub

            Collections.shuffle(pic);
            int time=1;
            press=true;

            pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.memgreen));
            pic.get(1).setImageDrawable(getResources().getDrawable(R.drawable.memgreen));
            pic.get(2).setImageDrawable(getResources().getDrawable(R.drawable.memred));
            pic.get(3).setImageDrawable(getResources().getDrawable(R.drawable.memred));
            pic.get(4).setImageDrawable(getResources().getDrawable(R.drawable.memblue));
            pic.get(5).setImageDrawable(getResources().getDrawable(R.drawable.memblue));
            pic.get(6).setImageDrawable(getResources().getDrawable(R.drawable.memwhite));
            pic.get(7).setImageDrawable(getResources().getDrawable(R.drawable.memwhite));
            pic.get(8).setImageDrawable(getResources().getDrawable(R.drawable.mempurple));
            pic.get(9).setImageDrawable(getResources().getDrawable(R.drawable.mempurple));
            pic.get(10).setImageDrawable(getResources().getDrawable(R.drawable.memyellow));
            pic.get(11).setImageDrawable(getResources().getDrawable(R.drawable.memyellow));

            try {
                Thread.sleep(5000);

                pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.coin));

            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     }
  });

回答1:


Well, if you want the UI to remain responsive you can't block the UI thread with Thread.sleep there.

Create a new thread, then sleep it. After the sleep, run the method for changing the view drawable on the UI thread

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.coin));
            }
        });
    }
}).start();



回答2:


Create an image array and set a handler. Using postDelayed doesn't block the thread.

            int[] imageArray = { R.drawable.img_1, R.drawable.img_2,
            R.drawable.img_3, R.drawable.img_4,
            R.drawable.img_5};

            Handler handler = new Handler();
            Runnable runnable = new Runnable() {
                int i = 0;

                public void run() {
                    imageView1.setImageResource(imageArray[i]);
                    i++;
                    if (i > imageArray.length - 1) {
                        i = 0;
                    }
                    handler.postDelayed(this, 5000); //displays every 5 seconds
                }
            };
            handler.postDelayed(runnable, 5000);


来源:https://stackoverflow.com/questions/8369718/sleep-function-in-android-program

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!