2

我想将一个大/复杂的 svg 图像文件加载到我的 imageView 中。在我的 HTC Desire S 和联想 a60 上加载 svg 需要一些时间。分别约为 5 秒和 10 秒。

现在我的应用程序变得无响应约 5 秒,直到 imageView 完全加载

我使用这个简单的代码加载图像..

    svg = SVGParser.getSVGFromResource(getResources(), R.raw.gf);
    mImageView.setImageDrawable(svg.createPictureDrawable());

我看起来像(webView)

webView.setWebViewClient(new WebViewClientEx(MainActivity.this, DEBUG) {

 @Override
        public void onPageFinished(final WebView view, String url) {
 ...........
 .............}
 });

我在以前的项目中使用过...

最后我的问题:

1.) 使应用程序看起来响应的最佳方法是什么?

我打算使用 asynctask 但不知道如何使用它......它适用于这里吗?

2.) 图像完全加载后是否有监听器?

我的方法是在加载 imageView 时显示 progressDialog 并在 imageView 完全加载后隐藏它。

您认为更适合用于显示/隐藏 progressDialog 的其他建议?谢谢!

4

2 回答 2

2

在此处使用异步任务。(加载器也可以工作,但异步任务更容易解释。)

 private class LoadSVGTask extends AsyncTask<Integer, Void, Drawable> {

  protected Drawable doInBackground(Integer... res) {
  mProgressBar.setVisibility(View.Visible);
  svg = SVGParser.getSVGFromResource(getResources(),res); 
  Drawable d = svg.createPictureDrawable();
  return d;
 }

 // gets executed in main thread
 protected void onPostExecute(Drawable result) {
 mProgressBar.setVisibility(View.Gone);
     mImageView.setImageDrawable(result);
 }
}

使用以下命令启动任务:

new LoaderSVGTask().execute(R.raw.gf, null, null);

见:http: //developer.android.com/reference/android/os/AsyncTask.html

于 2013-01-31T10:34:27.000 回答
1

只需在其中引用AsyncTask

protected void onPreExecute (){
   progressDialog.show(......);

}

protected abstract Result doInBackground (Params... params){
  //load your image from here
}

protected void onPostExecute (Result result){
 progressDialog.dismiss();
}
于 2013-01-31T10:25:06.393 回答