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

    package cn.com.mzba.service;

    import java.io.InputStream;
    import java.lang.ref.SoftReference;
    import java.net.URL;
    import java.util.HashMap;

    import android.graphics.drawable.Drawable;
    import android.os.Handler;
    import android.os.Message;
    import android.widget.ImageView;债务追讨
    /**
     * 实现图片的异步载入显示
     * @author kandanle
     *
     */
    public class AsyncImageLoader {

        /**
         * 软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。软引用对象最常用于实现内存敏感的缓存。
         */
        private HashMap<String, SoftReference<Drawable>> imageCache;
       
        public AsyncImageLoader(){
            imageCache = new HashMap<String, SoftReference<Drawable>>();
        }
       
        public Drawable loadDrawable(final String imageUrl,final ImageView imageView,final ImageCallback imagecallback){
            if(imageCache.containsKey(imageUrl)){
                //从缓存中读取人人
                SoftReference<Drawable> softReference = imageCache.get(imageUrl);
                Drawable drawable = softReference.get();
                if(drawable != null){
                    return drawable;
                }
            }
            final Handler handler = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    imagecallback.imageLoaded((Drawable)msg.obj, imageView, imageUrl);
                }
            };
            new Thread(){
                public void run() {
                    Drawable drawable = loadImageFromUrl(imageUrl);
                    imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
                    Message message = handler.obtainMessage(0, drawable);
                    handler.sendMessage(message);
                }
            }.start();
           
            return null;
        }
       
        public static Drawable loadImageFromUrl(String urlPath){
            URL url;
            InputStream is = null;
            try{
                url = new URL(urlPath);
                is = (InputStream)url.getContent();
            }catch(Exception e){
                e.printStackTrace();
            }
            Drawable drawable = Drawable.createFromStream(is, "src");
            return drawable;
        }
       
    }

    package cn.com.mzba.service;

    import android.graphics.drawable.Drawable;
    import android.widget.ImageView;

    public interface ImageCallback {
        public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl);
    }

    Drawable drawable = asyncImageLoader.loadDrawable(weiboInfo.getUserIcon(), viewUserIcon, new ImageCallback() {
        @Override
        public void imageLoaded(Drawable imageDrawable, ImageView imageView,String imageUrl) {
        imageView.setImageDrawable(imageDrawable);
            }
    });
    if(drawable == null){风之境地 java-javascript 蘑菇街女装
        viewUserIcon.setImageResource(R.drawable.portrait);
    }else{
        viewUserIcon.setImageDrawable(drawable);
    }

  • 相关阅读:
    Linux 如何查看当前目录
    Docker快速入手实战笔记
    【ssh】ssh登录出现‘The authenticity of host ‘IP’ can't be established.’的问题
    【AFL(七)】afl-fuzz.c小改——输出文件夹暂存
    【steam】Steam背景美化——长展柜终极指南
    【AFL(六)】AFL源码中的那些头文件
    【AFL(五)】文件变异策略
    【Latex】详细的简易教程——写在论文开始之前
    【Latex】论文写作工具:VScode 2019 + latex workshop
    【AFL(四)】afl-cmin修改:文件夹相关操作鲁棒性
  • 原文地址:https://www.cnblogs.com/sky7034/p/2030074.html
Copyright © 2011-2022 走看看