如何在imageView上创建progressDialog onload?

时间:2013-01-31 10:07:57

标签: android android-asynctask imageview drawable progressdialog

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

现在我的应用程序在imageView完全加载之前大约5秒没有响应

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

    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的其他建议吗?谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();
}