【问题标题】:How I make an ImageView show-up immediatlly我如何立即显示 ImageView
【发布时间】:2016-04-03 12:58:47
【问题描述】:
public class MainActivity extends Activity {
   ImageView img;
   MediaPlayer failure;

   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      Button bButton= (Button)findViewById(R.id.blueBtn);
      img = (ImageView)findViewById(R.id.image);
      img.setVisibility(View.VISIBLE);
      failure= MediaPlayer.create(this,R.raw.failure_sound);

      bButton.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v){
            img.setVisibility(View.VISIBLE);            
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            failure.start();

        }
       });

      }

这就是我的代码。 我只是想让它在我按下按钮时显示图像 然后等待 1000 毫秒,然后发出声音。 但是(!)不幸的是,当我按下该按钮时:该过程等待 1000 毫秒,然后发出声音并显示 img。

请帮忙!!!

【问题讨论】:

  • 使用Handler 而不是Thread.sleep
  • 如果我想显示图像,然后延迟整个程序,然后继续并发出声音怎么办。 (我当然会问,因为我有很多问题......)
  • 可以请人在这里帮助我。我想要在不冻结我的 UI 的情况下产生与睡眠相同效果的东西。亨德勒不会让我的程序停止。我想在 for 循环中间停止程序,显示图片,然后停止一切(循环)。但处理程序不这样做。最好的毕业生

标签: android eclipse image button imageview


【解决方案1】:

替换您的 onClick 处理程序:

public void onClick(View v){
    img.setVisibility(View.VISIBLE);            
    v.postDelayed(new Runnable() { 
       public void run() {  failure.start(); }
    },1000);
}

【讨论】:

  • 如果我想显示图像,然后延迟整个程序,然后继续并发出声音怎么办。 (我当然会问,因为我有很多问题......)
  • 你是什么意思 - 延迟整个程序?您想阻止用户与其交互,或者您想延迟某些代码执行?
  • 我想在 for 循环的中间进行延迟,现在有了这个 postDelayed 循环继续计数。我希望每一次都停止 1000 毫秒,然后才能保持循环。非常感谢!!!
  • 将循环分成两部分:延迟前和延迟后。将第一部分放在 v.postDelayed() 调用之前。将第二部分放在 failure.start() 调用之后。
  • 不幸的是它没有帮助。循环继续! ohhhhhh 我坐在这个小时ssss :(
【解决方案2】:

使用Thread.sleep(10000); 会导致主线程冻结,因此在这段时间内无法更新 UI。

如果你想等待一定的时间来做某事,你可以使用Handler代替,这样UI可以同时更新:

public void onClick(View v){
    img.setVisibility(View.VISIBLE);

    new Handler().postDelayed(new Runnable() {
        public void run() {
             failure.start();
        }
    }, 1000);
}

【讨论】:

  • 如果我想显示图像,然后延迟整个程序,然后继续并发出声音怎么办。 (我问当然是因为我有那种问题......)
  • 可以请人在这里帮助我。我想要在不冻结我的 UI 的情况下产生与睡眠相同效果的东西。亨德勒不会让我的程序停止。我想在 for 循环中间停止程序,显示图片,然后停止一切(循环)。但处理程序不这样做。最好的毕业生
【解决方案3】:

您正在让您的 UI 线程进入睡眠状态,这会导致您的应用冻结并且图像不显示。 一个更好的方法是使用一个处理程序,它会在延迟后执行代码并且不会冻结你的 UI。

您的 clickListener 的快速调整是:

bButton.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v){
        img.setVisibility(View.VISIBLE);            
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                failure.start();
            }
        }, 1000);
   });
}

【讨论】:

  • 如果我想显示图像,然后延迟整个程序,然后继续并发出声音怎么办。 (我问当然是因为我有那种问题......)
  • 可以请人在这里帮助我。我想要在不冻结我的 UI 的情况下产生与睡眠相同效果的东西。亨德勒不会让我的程序停止。我想在 for 循环中间停止程序,显示图片,然后停止一切(循环)。但处理程序不这样做。最好的毕业生
猜你喜欢
  • 2012-03-12
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 2020-02-16
  • 1970-01-01
  • 2021-04-13
相关资源
最近更新 更多