package com.example.androidhive;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;
public class ImageLoader {
MemoryCache memoryCache=new MemoryCache();
FileCache fileCache;
private Map<ImageView, String> imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
ExecutorService executorService;
public ImageLoader(Context context){
fileCache=new FileCache(context);
executorService=Executors.newFixedThreadPool(5);
}
final int stub_id = R.drawable.no_image;
public void DisplayImage(String url, ImageView imageView)
{
imageViews.put(imageView, url);
Bitmap bitmap=memoryCache.get(url);
if(bitmap!=null)
imageView.setImageBitmap(bitmap);
else
{
queuePhoto(url, imageView);
imageView.setImageResource(stub_id);
}
}
private void queuePhoto(String url, ImageView imageView)
{
PhotoToLoad p=new PhotoToLoad(url, imageView);
executorService.submit(new PhotosLoader(p));
}
private Bitmap getBitmap(String url)
{
File f=fileCache.getFile(url);
Bitmap b = decodeFile(f);
if(b!=null)
return b;
try {
Bitmap bitmap=null;
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is=conn.getInputStream();
OutputStream os = new FileOutputStream(f);
Utils.CopyStream(is, os);
os.close();
bitmap = decodeFile(f);
return bitmap;
} catch (Exception ex){
ex.printStackTrace();
return null;
}
}
private Bitmap decodeFile(File f){
try {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f),null,o);
final int REQUIRED_SIZE=70;
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=1;
while(true){
if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
scale*=2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {}
return null;
}
private class PhotoToLoad
{
public String url;
public ImageView imageView;
public PhotoToLoad(String u, ImageView i){
url=u;
imageView=i;
}
}
class PhotosLoader implements Runnable {
PhotoToLoad photoToLoad;
PhotosLoader(PhotoToLoad photoToLoad){
this.photoToLoad=photoToLoad;
}
@Override
public void run() {
if(imageViewReused(photoToLoad))
return;
Bitmap bmp=getBitmap(photoToLoad.url);
memoryCache.put(photoToLoad.url, bmp);
if(imageViewReused(photoToLoad))
return;
BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad);
Activity a=(Activity)photoToLoad.imageView.getContext();
a.runOnUiThread(bd);
}
}
boolean imageViewReused(PhotoToLoad photoToLoad){
String tag=imageViews.get(photoToLoad.imageView);
if(tag==null || !tag.equals(photoToLoad.url))
return true;
return false;
}
class BitmapDisplayer implements Runnable
{
Bitmap bitmap;
PhotoToLoad photoToLoad;
public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;}
public void run()
{
if(imageViewReused(photoToLoad))
return;
if(bitmap!=null)
photoToLoad.imageView.setImageBitmap(bitmap);
else
photoToLoad.imageView.setImageResource(stub_id);
}
}
public void clearCache() {
memoryCache.clear();
fileCache.clear();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
ListView获取显示大量网络图片(xml解析、内存软引用优化、ImageLoader、网络)
共50个文件
class:17个
java:8个
png:8个
需积分: 11 19 下载量 125 浏览量
2015-04-09
10:31:06
上传
评论 1
收藏 129KB ZIP 举报
温馨提示
http://blog.csdn.net/wangjinyu501/article/details/8219317这是人家的博文地址
资源推荐
资源详情
资源评论
收起资源包目录
ListView获取显示大量网络图片(xml解析、内存软引用优化、ImageLoader、网络).zip (50个子文件)
CustomizedListView
.project 854B
default.properties 362B
bin
com
example
androidhive
R$string.class 442B
ImageLoader$PhotoToLoad.class 729B
R$layout.class 441B
ImageLoader$PhotosLoader.class 2KB
R$drawable.class 709B
CustomizedListView.class 3KB
R.class 566B
CustomizedListView$1.class 1KB
MemoryCache.class 2KB
ImageLoader$BitmapDisplayer.class 1KB
LazyAdapter.class 3KB
R$attr.class 355B
FileCache.class 1KB
ImageLoader.class 5KB
Utils.class 814B
R$id.class 555B
XMLParser.class 4KB
resources.ap_ 27KB
CustomizedListView.apk 37KB
classes.dex 15KB
proguard.cfg 1KB
.settings
org.eclipse.jdt.core.prefs 629B
AndroidManifest.xml 740B
src
com
example
androidhive
FileCache.java 910B
ImageLoader.java 5KB
CustomizedListView.java 2KB
Utils.java 537B
XMLParser.java 3KB
LazyAdapter.java 2KB
MemoryCache.java 714B
res
values
strings.xml 187B
layout
list_row.xml 2KB
main.xml 520B
drawable-ldpi
icon.png 2KB
drawable-hdpi
arrow.png 550B
rihanna.png 9KB
gradient_bg.xml 325B
play.png 372B
no_image.png 3KB
Thumbs.db 7KB
list_selector.xml 490B
heart.png 1KB
image_bg.xml 326B
icon.png 4KB
gradient_bg_hover.xml 338B
drawable-mdpi
icon.png 3KB
.classpath 280B
gen
com
example
androidhive
R.java 2KB
assets
共 50 条
- 1
资源评论
蒙奇D索隆
- 粉丝: 1
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功