【问题标题】:Sleep function in android program [duplicate]android程序中的睡眠功能[重复]
【发布时间】:2012-01-12 06:32:50
【问题描述】:

让我的程序进入睡眠状态时遇到问题 我想做的是当按下 btnStart 时,将图片随机设置为 12 个 ImageButtons 然后我希望它暂停 5 秒,然后将第一个 ImageButton 更改为另一张图片

我的代码看起来像这样,现在按下按钮时它会立即暂停...

       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();
            }
     }
  });

【问题讨论】:

  • 问题出在哪里?

标签: java android thread-sleep


【解决方案1】:

好吧,如果你想让 UI 保持响应,你不能用Thread.sleep 阻塞 UI 线程。

创建一个新线程,然后将其休眠。休眠后,在UI线程上运行改变视图drawable的方法

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】:

创建一个图像数组并设置一个处理程序。使用 postDelayed 不会阻塞线程。

            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);

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2011-04-08
    • 1970-01-01
    • 2011-02-03
    • 2021-03-22
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多