如何暂停和停止更改ImageView

时间:2010-03-18 21:43:53

标签: android

我有一个ImageView,其中图片每5秒切换一次,我试图添加暂停和

恢复按钮,可以停止并重新启动操作。我正在使用Handler,Runnable和

用于图像切换的postDelay(),我将代码放在onResume上。我正在考虑使用

等待并通知暂停和恢复,但这意味着要创建一个额外的线程。所以

远非线程,我有这个:

类RecipeDisplayThread扩展了Thread     {         boolean pleaseWait = false;

    // This method is called when the thread runs
    public void run() {
        while (true) {
            // Do work

            // Check if should wait
            synchronized (this) {
                while (pleaseWait) {
                    try {
                        wait();
                    } catch (Exception e) {
                    }
                }
            }

            // Do work
        }
    }

}   

并在主要活动的onCreate()中:

        Button pauseButton = (Button) findViewById(R.id.pause);

        pauseButton.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View view) 
            {
                while (true) {

                synchronized (thread) 
                {
                    thread.pleaseWait = true;
                    }
                }

            }
        });

        Button resumeButton = (Button) findViewById(R.id.resume);

        resumeButton.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View view) 
            {
                while (true) {

                // Resume the thread
                synchronized (thread) 
                {
                    thread.pleaseWait = false;
                    thread.notify();
                }
                }

            }
        });

暂停按钮似乎有效,但之后我无法按任何其他按钮,例如

简历按钮。

感谢。

2 个答案:

答案 0 :(得分:2)

  

我正在使用Handler,Runnable和   postDelay()用于图像切换

为什么呢?为什么不使用postDelayed()并删除ThreadHandler

  void doTheImageUpdate() {
    if (areWeStillRunning) {
      myImageView.setImageResource(R.drawable.whatever);
      myImageView.postDelayed(updater, 5000);
    }
  }

  Runnable updater=new Runnable() {
    public void run() {
      doTheImageUpdate();
    }
  };

如果您想开始更新,请将areWeStillRunning设为true并致电doTheImageUpdate()。如果要停止更新,请将areWeStillRunning设置为false。你需要找出用户按下暂停并在5秒内恢复的边缘情况,以防止事情加倍,但我将其作为练习留给读者。

如果您真的想使用后台线程,则需要了解有关如何使用后台线程的更多信息。例如,while(true) {}没有任何形式的退出将永远不会起作用。有一些关于这个主题的好书,例如this one

答案 1 :(得分:0)

很抱歉回答我自己的问题,但评论部分太小了。

我做了这个(根据CommonsWare):

private Runnable mWaitRunnable = new Runnable() {
    public void run() 
    {
        doTheImageUpdate();
    }
};

private void doTheImageUpdate()
{
    try
    {
        if(bStillRunning)
        {

            sText = "Step one: unpack egg";
            iDrawable = R.drawable.monster2;

            t.setText(sText);
            mImage = BitmapFactory.decodeResource(getResources(), iDrawable);

            imageView.setImageBitmap(mImage);

            tts1 = new TTS(getApplicationContext(), ttsInitListener, true);             

            mHandler.postDelayed(mWaitRunnable, 5000);
        }
    }
    catch (Exception e)
    {
        Log.e("mWaitRunnable.run()", e.getMessage());
    }

}



        Button pauseButton = (Button) findViewById(R.id.pause);

        pauseButton.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View view) 
            {

                bStillRunning = false;

            }
        });

        Button resumeButton = (Button) findViewById(R.id.resume);

        resumeButton.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View view) 
            {

                bStillRunning = true;

            }
        });

再次暂停工作,但恢复没有。我已经通过使所有步骤的文本,图像和延迟时间相同来简化我的问题。除了步骤数之外,我希望能够制作这些变量。