2014-02-26 67 views
0

嗨我已經創建了一個android應用程序,在我加載imageview從url中的圖像。問題在圖像視圖中加載圖像

但在圖像加載期間,我在ImageView中獲得了一些圖像。

我的代碼是:

Custom_Adapter.java

DrawableManager d=new DrawableManager(); 
d.fetchDrawableOnThread(url, vholder.img_album); 

DrawableManager.java

public class DrawableManager 
{ 
    private final Map<String, Drawable> drawableMap; 
    public DrawableManager() { 
     drawableMap = new HashMap<String, Drawable>(); 
    } 

    public Drawable fetchDrawable(String urlString) { 
     if (drawableMap.containsKey(urlString)) { 
      return drawableMap.get(urlString); 
     } 

     Log.d(this.getClass().getSimpleName(), "image url:" + urlString); 
     try { 
      InputStream is = fetch(urlString); 
      Drawable drawable = Drawable.createFromStream(is, "src"); 


      if (drawable != null) { 
       drawableMap.put(urlString, drawable); 
       Log.d(this.getClass().getSimpleName(), "got a thumbnail drawable: " + drawable.getBounds() + ", " 
         + drawable.getIntrinsicHeight() + "," + drawable.getIntrinsicWidth() + ", " 
         + drawable.getMinimumHeight() + "," + drawable.getMinimumWidth()); 
      } else { 
       Log.w(this.getClass().getSimpleName(), "could not get thumbnail"); 
      } 

      return drawable; 
     } catch (MalformedURLException e) { 
      Log.e(this.getClass().getSimpleName(), "fetchDrawable failed", e); 
      return null; 
     } catch (IOException e) { 
      Log.e(this.getClass().getSimpleName(), "fetchDrawable failed", e); 
      return null; 
     } 
    } 

    public void fetchDrawableOnThread(final String urlString, final ImageView imageView) { 
     if (drawableMap.containsKey(urlString)) { 
      imageView.setImageDrawable(drawableMap.get(urlString)); 
     } 

     final Handler handler = new Handler() { 
      @Override 
      public void handleMessage(Message message) { 
       imageView.setImageDrawable((Drawable) message.obj); 
      } 
     }; 

     Thread thread = new Thread() { 
      @Override 
      public void run() {     
       Drawable drawable = fetchDrawable(urlString); 
       Message message = handler.obtainMessage(1, drawable); 
       handler.sendMessage(message); 
      } 
     }; 
     thread.start(); 
    } 

    private InputStream fetch(String urlString) throws MalformedURLException, IOException { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(urlString); 
     HttpResponse response = httpClient.execute(request); 
     return response.getEntity().getContent(); 
    } 
} 

回答

0

使用SmartImageview獲得更高的性能nd如果使用此庫代碼完成一些定製,則可以從URL加載圖像,也可以從SD卡加載圖像。

https://github.com/loopj/android-smart-image-view

+0

我試過了,但是它給出了內存不足的錯誤。 –

+0

你可以在Asyntask中管理加載圖片嗎?因爲我已經實現並綁定了1000張具有高分辨率的圖片。它的工作正常.. – KDOSHI