我如何立即显示 ImageView

Posted

技术标签:

【中文标题】我如何立即显示 ImageView【英文标题】:How I make an ImageView show-up immediatlly 【发布时间】: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 循环中间停止程序,显示图片,然后停止一切(循环)。但处理程序不这样做。最好的毕业生 【参考方案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 循环中间停止程序,显示图片,然后停止一切(循环)。但处理程序不这样做。最好的毕业生

以上是关于我如何立即显示 ImageView的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中立即强制显示器进入省电模式?

如何创建一个按钮来创建另一个按钮并立即显示

插入后如何在datagridview中立即刷新或显示?

状态更新没有立即反映。如何使用 useEffect 的依赖数组来显示更改?

插入后如何在datagridview中立即刷新或显示?

如何在控制器加载时立即显示 InAppBrowser 的实例,而 Ionic 应用程序不会无响应?