• 异步图片加载工具类


    package com.su.doubanrise.widget;
    
    import java.io.File;
    import java.lang.ref.SoftReference;
    import java.util.HashMap;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    
    import android.os.Handler;
    import android.os.Message;
    import android.widget.ImageView;
    
    import com.su.doubanrise.DoubanApp;
    import com.su.doubanrise.R;
    import com.su.doubanrise.overall.Constant;
    import com.su.doubanrise.util.FileDownLoader;
    import com.su.doubanrise.util.Str;
    
    public class AsyncImageLoader {
        private Context mcontext;
        private HashMap<String, SoftReference<Bitmap>> imageCache = new HashMap<String, SoftReference<Bitmap>>();;
    
        public AsyncImageLoader() {
            this.mcontext = DoubanApp.getContext();
    
        }
    
        /**
         * 异步加载sd卡的图片 ,
         * 
         * @param uri
         * @param imageView
         * @param imageCallback
         * @return
         */
        private Bitmap loadBitmapFromSD(final String uri,
                final ImageView imageView, final ImageCallback imageCallback) {
            if (imageCache.containsKey(uri)) {
                SoftReference<Bitmap> SoftReference = imageCache.get(uri);
                Bitmap bitmap = SoftReference.get();
                if (bitmap != null) {
                    return bitmap;
                }
            }
            final Handler handler = new Handler() {
                public void handleMessage(Message msg) {
                    imageCallback.imageLoaded((Bitmap) msg.obj, imageView, uri);
                }
            };
            new Thread() {
                public void run() {
                    Bitmap bitmap = null;
                    bitmap = getBitmapFromFile(uri);
                    imageCache.put(uri, new SoftReference<Bitmap>(bitmap));
                    if (!new File(uri).isFile()) {
                        bitmap = BitmapFactory.decodeResource(
                                mcontext.getResources(), R.drawable.ic_launcher);
    
                    }
                    Message msg = handler.obtainMessage(0, bitmap);
                    handler.sendMessage(msg);
                    bitmap = null;
                }
            }.start();
            return null;
        }
    
        private Bitmap loadBitmapFromNet(final String url,
                final ImageView imageView, final int opsize,
                final ImageCallback imageCallback) {
    
            final String savePath = Constant.PICPATH + Str.md5(url);
    
            if (imageCache.containsKey(url)) {
    
                Bitmap bitmap = imageCache.get(url).get();
                if (bitmap != null) {
                    return bitmap;
                }
            }
            final Handler handler = new Handler() {
                public void handleMessage(Message msg) {
                    imageCallback.imageLoaded((Bitmap) msg.obj, imageView, url);
                }
            };
            new Thread() {
                public void run() {
                    try {
                        FileDownLoader.downloadImg(url, savePath);
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    Bitmap bitmap = null;
                    bitmap = getBitmapFromFile(savePath, opsize);
    
                    imageCache.put(url, new SoftReference<Bitmap>(bitmap));
                    if (!new File(savePath).isFile()) {
                        bitmap = BitmapFactory.decodeResource(
                                mcontext.getResources(), R.drawable.ic_launcher);
                    }
                    Message msg = handler.obtainMessage(0, bitmap);
                    handler.sendMessage(msg);
    
                }
            }.start();
            return null;
        }
    
        private interface ImageCallback {
            public void imageLoaded(Bitmap imageBitmap, ImageView imageView,
                    String uri);
        }
    
        /**
         * 从本读读取图片
         * 
         * @param uri
         * @return
         */
        private Bitmap getBitmapFromFile(String uri) {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 8;
            Bitmap bitmap = BitmapFactory.decodeFile(uri, options);
            return bitmap;
        }
    
        /**
         * 从本读读取图片 添加opt参数
         * 
         * @param uri
         * @return
         */
        private Bitmap getBitmapFromFile(String uri, int opsize) {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = opsize;
            options.inPurgeable = true;
            Bitmap bitmap = BitmapFactory.decodeFile(uri, options);// 这里还是会出现oom??
            return bitmap;
        }
    
        /**
         * 最终暴露给用户的接口
         * 
         * @param url
         * @param imageView
         */
    
        public void setAsyncBitmapFromNet(String url, ImageView imageView) {
            if (url == null) {
                return;
            }
    
            imageView.setImageBitmap(loadBitmapFromNet(url, imageView, 1,
                    new ImageCallback() {
                        public void imageLoaded(Bitmap imageBitmap,
                                ImageView imageView, String imageUrl) {
                            imageView.setImageBitmap(imageBitmap);
                        }
                    }));
        }
    
        /**
         * 异步加载本地图片
         * 
         * @param uri
         * @param imageView
         */
        public void setAsyncBitmapFromSD(String uri, ImageView imageView) {
            if (uri == null) {
                return;
            }
    
            imageView.setImageBitmap(loadBitmapFromSD(uri, imageView,
                    new ImageCallback() {
                        public void imageLoaded(Bitmap imageBitmap,
                                ImageView imageView, String imageUrl) {
                            imageView.setImageBitmap(imageBitmap);
                        }
                    }));
        }
    
        /**
         * 由于加载本地图片时间较短 ,其实可以不使用这个方法减小线程的开销
         * 
         * @param uri
         * @param imageView
         */
        public void setBitmapFromSD(String uri, ImageView imageView) {
            if (uri == null) {
                return;
            }
    
            imageView.setImageBitmap(getBitmapFromFile(uri));
        }
    }
  • 相关阅读:
    安装Python及pip
    关于软件测试培训
    终于也为自己开了技术博客
    全球地址联动js包2021最新
    约瑟夫斯问题
    添加二级域名
    mysql导出数据
    mysql导入数据
    shopify
    MySQL数据库简介及常用命令
  • 原文地址:https://www.cnblogs.com/fx2008/p/3138129.html
Copyright © 2020-2023  润新知