zoukankan      html  css  js  c++  java
  • listview异步加载图片

    package com.example.testlistloadimage;

    import java.io.IOException;
    import java.io.InputStream;
    import java.lang.ref.SoftReference;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;

    import android.graphics.drawable.Drawable;
    import android.os.Handler;
    import android.os.Message;
    import android.widget.ImageView;


    public class AsyncImageLoad {

    private final int defaultimage;
    private ExecutorService executorservice;
    private MemoryCache mcache =new MemoryCache();
    class MemoryCache {
    private Map<String,SoftReference<Drawable>> cache =
    Collections.synchronizedMap(new HashMap<String, SoftReference<Drawable>>());
    //可再加入本地文件缓存

    public Drawable get(String id){
    if(cache.containsKey(id)){
    return cache.get(id).get();
    }
    return null;
    }
    public void put(String id,Drawable drawable){
    cache.put(id, new SoftReference<Drawable>(drawable));
    }
    public void clear(){
    cache.clear();
    }
    }
    class FileCache{

    }
    public AsyncImageLoad(int defaultimage){
    this.defaultimage = defaultimage;
    //创建一个纯种池
    executorservice = Executors.newFixedThreadPool(5);

    }
    public void LoadImage(final ImageView imageview,final String imageurl,final ImageLoadCallBack callback){
    imageview.setTag(imageurl);
    //首先从内存中查找 ,如果没有再去开启新的线程加载图片
    Drawable drawable = mcache.get(imageurl);
    if(drawable != null){
    imageview.setImageDrawable(drawable);
    return;
    }
    //设置默认图片
    imageview.setImageResource(defaultimage);

    final Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    super.handleMessage(msg);
    if(imageview.getTag().toString().equals(imageurl)){
    imageview.setImageDrawable((Drawable)msg.obj);
    callback.imageloaded((Drawable)msg.obj);
    }

    }
    };
    executorservice.submit(new Thread(){
    @Override
    public void run() {
    // TODO Auto-generated method stub
    super.run();


    try {
    URL url = new URL(imageurl);
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.setConnectTimeout(3000);
    conn.setReadTimeout(3000);

    InputStream inputStream = conn.getInputStream();
    Drawable drawable = Drawable.createFromStream(inputStream, "src");
    mcache.put(imageurl, drawable);
    Message msg = handler.obtainMessage();
    msg.obj = drawable;
    handler.sendMessage(msg);

    } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    });





    }



    public interface ImageLoadCallBack{
    public void imageloaded(Drawable imagedrawable);
    }
    }

  • 相关阅读:
    cmd 一键获取 所有连接过的wifi 密码
    MYSQL注入语句
    Web安全篇之SQL注入攻击
    Kali Linux 不能联网上网 解决方法
    php杂项
    laravel下的数据序列化
    填充数据
    css
    array
    GD库常用函数
  • 原文地址:https://www.cnblogs.com/zhangxiaoshuai/p/4606629.html
Copyright © 2011-2022 走看看