One way to do this is with the AQuery library .
This is a library that allows you to be lazy to download images from your local storage or URL. With support for things like caching and scaling.
Example for lazy loading a resource without scaling:
AQuery aq = new AQuery(mContext); aq.id(yourImageView).image(R.drawable.myimage);
An example for lazy loading an image into a File object with zooming out:
InputStream ins = getResources().openRawResource(R.drawable.myImage); BufferedReader br = new BufferedReader(new InputStreamReader(ins)); StringBuffer sb; String line; while((line = br.readLine()) != null){ sb.append(line); } File f = new File(sb.toString()); AQuery aq = new AQuery(mContext); aq.id(yourImageView).image(f,350);
Example download from a URL using local memory caching, local caching, and resizing.
AQuery aq = new AQuery(mContext); aq.id(yourImageView).image(myImageUrl, true, true, 250, 0, null);
This will start the asynchronous loading of the image in myImageUrl , resize it to a width of 250, and cache it in memory and storage. Then it will show the image in your yourImageView . Whenever the image myImageUrl was loaded and cached before, this line of code will load one of them into the cache in memory or in storage.
Typically, these methods will be called in the getView method of the list adapter.
For complete documentation on AQuery image download capabilities, you can check the documentation .