2012-10-07 4 views
1

이미지를 Android에 표시 할 때 어떻게로드 할 수 있습니까? 누구든지 좋은 설명서를 알고 있습니까? 또한이 작업을 수행하려면 asyncTask가 필요합니까? 또한, 다음과 같은 그림을 원한다면 Android XML 파일을 어떻게 선언해야합니까?이미지를 표시 할 때로드하십시오. Android

enter image description here

답변

1

는 그것은 목록보기에서 이미지의 게으른로드라고.

package com.wilson.android.library; 

import java.io.IOException; 

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() { 
       //TODO : set imageView to a "pending" image 
       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(); 
    } 

} 

이 스레드에서 얻은 : 다음은이 작업을 수행하는 데 사용할 수있는 코드 조각입니다 Lazy load of images in ListView

관련 문제