2011-12-20 132 views
1

我用函数来显示图片:加载图片显示加载进度

Bitmap imageBitmap = loadBitmap(URL); 

loadBitmap()如下:

private Bitmap loadBitmap(String url) { 
try { 
Bitmap bm = BitmapFactory.decodeStream((InputStream)this.fetch(url)); 
return bm; 
} 
catch(Exception e) { 
e.printStackTrace(); 
return null; 
} 
} 

及以下取():

public Object fetch(String address) { 
try { 
URL url = new URL(address); 
Object content = url.getContent(); 
return content; 
} 
catch(Exception e) { 
e.printStackTrace(); 
} 
return this; 
} 

我要在加载时显示加载进度或load.png。 并以图片加载结束并显示。 我该怎么办? 我尝试使像ProgressDialog。 但我不知道如何使用?

回答

2

您可以使用AsyncTask显示进度对话框上的PreExecute()方法和隐藏/在PostExecute()方法驳回。

ProgressDialog prog = new ProgressDialog(this); // Create Progress Dialog 


private class DownloadBitmap extends AsyncTask<Void, Integer, Void>{ 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     //Display progressDialog before download starts 
     prog.show(); 

    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     prog.hide(); //Hide Progress Dialog else use dismiss() to dismiss the dialog 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     /* 
     * Perform download and Bitmap conversion here 
     * 
     */ 
     return null; 
    } 

} 

,最后通过调用的AsyncTask,

DownloadBitmap dd = new DownloadBitmap(); 
dd.execute(); 
1

你不能这样做,直接,因为Android不支持GIF文件。因此,为了消除这种情况,您必须创建单独的图像(将图像加载到分割图像中)并制作动画。在加载时运行动画,一旦位图有效停止动画并在ImageView上设置位图

1

此示例显示下载图像时的进度条,稍后它不可见。

public class ImageDownload extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main1); 

     ImageView mainImageView = (ImageView) findViewById(R.id.imageView); 
     ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar); 
     String imageurl = "http://ipadwallpaperportal.com/wp-content/main/2011_09/purple-flower-close-up-1024x1024-wallpaper.jpg"; 
     ImageDownloadMessageHandler imageDownloadMessageHandler1 = new ImageDownloadMessageHandler(
       progressBar, mainImageView); 
     ImageDownlaodThread imageDownlaodThread = new ImageDownlaodThread(
       imageDownloadMessageHandler1, imageurl); 
     imageDownlaodThread.start(); 

    } 

    class ImageDownlaodThread extends Thread { 
     ImageDownloadMessageHandler imageDownloadMessageHandler; 
     String imageUrl; 

     public ImageDownlaodThread(
       ImageDownloadMessageHandler imageDownloadMessageHandler, 
       String imageUrl) { 
      this.imageDownloadMessageHandler = imageDownloadMessageHandler; 
      this.imageUrl = imageUrl; 
     } 

     @Override 
     public void run() { 
      Drawable drawable = LoadImageFromWebOperations(imageUrl); 
      Message message = imageDownloadMessageHandler.obtainMessage(1, 
        drawable); 
      imageDownloadMessageHandler.sendMessage(message); 
      System.out.println("Message sent"); 
     } 

    } 

    class ImageDownloadMessageHandler extends Handler { 
     ProgressBar progressBar; 
     View imageTextView; 

     public ImageDownloadMessageHandler(ProgressBar progressBar, 
       View imageTextView) { 
      this.progressBar = progressBar; 
      this.imageTextView = imageTextView; 
     } 

     @Override 
     public void handleMessage(Message message) { 
      progressBar.setVisibility(View.GONE); 
      imageTextView.setBackgroundDrawable(((Drawable) message.obj)); 
      imageTextView.setVisibility(View.VISIBLE); 
     } 

    } 

    Drawable LoadImageFromWebOperations(String strUrl) { 
     /** 
     * This is one method 
     */ 
     long x1 = System.currentTimeMillis(); 

     Drawable d = null; 
     InputStream is = null; 
     try { 
      is = (InputStream) new URL(strUrl).getContent(); 
      d = Drawable.createFromStream(is, "src name"); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     long x2 = System.currentTimeMillis(); 
     long res = x2 - x1; 
     Log.v("Image Downloading Time", "" + res); 
}