0

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

那么有没有一种“好”的方法来设置图像/背景而不锁定主线程?

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

4

2 回答 2

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

我希望这会对你有所帮助

于 2012-07-03T11:25:33.097 回答
0

Muhannad 的回答有几点要补充:

  • 你不一定非要在 AsyncTask 中做,一个线程就可以了;
  • 您可能希望将图像渲染为专用位图,然后使用Canvas.drawBitmap()onDraw()上进行渲染,以节省在 UI 线程中渲染所花费的时间。
于 2012-07-03T18:05:12.877 回答