在不锁定“主”线程的情况下显示图像

时间:2012-07-02 18:39:08

标签: android imageview android-4.0-ice-cream-sandwich android-imageview

我的应用程序遇到了问题。我正在将一系列内部iPad应用程序从iOS移植到android,图像序列是他们设计中不可或缺的部分。它们需要标准的全屏停止,启动,暂停功能,所有这些功能都可以从ImageView的子类中正常工作。但它目前只显示在锁定的进程对话框不断出现之前通过的300个图像中的2个。

那么在没有锁定主线程的情况下设置图像/背景有“好”的方法吗?

仅供参考AnimateDrawable并不适合我需要的东西,因为它不提供暂停/恢复功能,而且我拥有的序列数量很容易达到数百个,平均只有几百帧。

2 个答案:

答案 0 :(得分:1)

您可以使用 AsyncTask

异步加载图片

只需将与图像加载相关的代码放在 doInBackground 方法中 并尝试设置进度条或进度对话框等指标 所以你将在开始加载时开始显示对话框或栏 并在完成后使用 onPostExecute 方法

中的处理程序关闭对话框

示例代码:

 class SomeClass extends Activity {
protected ProgressDialog pd ;
protected Handler handler = new Handler(){
@Override 
public void handleMessage(int what){
   if(pd.isShowing())
      pd.dismiss();
}
     .....

     class LoadImageTask extends AsyncTask<URL, Integer, Long> {
          protected void onPreExecute(Long result) {
            pd = ProgressDialog.show(getContext(),"Title","Message");
         }

         protected Long doInBackground(URL... urls) {

          //Load IMAGEs code
             return totalSize;
         }



         protected void onPostExecute(Long result) {
             //finish loadiing images
              handler .sendEmptyMessage(0);
         }
     }
    }

我希望这会对你有所帮助

答案 1 :(得分:0)

要为Muhannad的回答添加一些东西:

  • 您不必在AsyncTask中执行此操作,线程可以执行;
  • 您可能希望将图像渲染为专用位图,然后使用Canvas.drawBitmap()onDraw()上渲染它,以节省在UI线程中渲染所花费的时间。