美文网首页
图片缓存

图片缓存

作者: 银弹星空 | 来源:发表于2018-04-04 14:07 被阅读0次

图片缓存加载方法

public class MyVideoThumbLoader {
    private ImageView imgView;
    private String path;
    //创建cache
    private LruCache<String, Bitmap> lruCache;

    public MyVideoThumbLoader() {
        int maxMemory = (int) Runtime.getRuntime().maxMemory();//获取最大的运行内存
        int maxSize = maxMemory / 4;//拿到缓存的内存大小
        lruCache = new LruCache<String, Bitmap>(maxSize) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                //这个方法会在每次存入缓存的时候调用
                return value.getByteCount();
            }
        };
    }

    public void addVideoThumbToCache(String path, Bitmap bitmap) {
        if (getVideoThumbToCache(path) == null) {
            //当前地址没有缓存时,就添加
            lruCache.put(path, bitmap);
        }
    }

    public Bitmap getVideoThumbToCache(String path) {

        return lruCache.get(path);

    }

    public void showThumbByAsyncTask(String path, ImageView imgView) {

        if (getVideoThumbToCache(path) == null) {
            //异步加载
            imgView.setImageResource(R.drawable.video);  //设置默认图片
            new MyAsyncTask(imgView, path).execute(path);
        } else {
            imgView.setImageBitmap(getVideoThumbToCache(path));
        }
    }

    class MyAsyncTask extends AsyncTask<String, Void, Bitmap> {
        private ImageView imgView;
        private String path;

        public MyAsyncTask(ImageView imageView, String path) {
            this.imgView = imageView;
            this.path = path;
        }

        @Override
        protected Bitmap doInBackground(String... params) {
            //通过 android中提供的 ThumbnailUtils.createVideoThumbnail(vidioPath, kind);
            Bitmap bitmap = ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(params[0], MediaStore.Images.Thumbnails.MICRO_KIND), 100, 100); //加入缓存中
            Log.v("getVideoThumbToCache:", "path:" + path);
            // Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(params[0], MediaStore.Video.Thumbnails.MICRO_KIND);
            if (bitmap != null) {
                if (getVideoThumbToCache(params[0]) == null) {
                    addVideoThumbToCache(path, bitmap);
                }
            }
            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {

            if (imgView.getTag().equals(path)) {//通过 Tag可以绑定 图片地址和 imageView,这是解决Listview加载图片错位的解决办法之一
                if (bitmap == null) {
                    imgView.setImageResource(R.drawable.video);
                } else {
                    imgView.setImageBitmap(bitmap);
                }
            }
        }
    }
}

相关文章

  • 架构&框架

    图片缓存 怎样设计一个图片缓存框架 图片管理者模块:内存缓存模块、磁盘缓存模块、网络图片下载模块 图片处理:图片解...

  • 区分SDWebImage的三种缓存

    SDWebImage的三种缓存分为:内存图片缓存、磁盘图片缓存、内存操作缓存步骤如下1、先查看内存图片缓存,内存图...

  • 多线程03

    SDWebImage框架详解 下载图片并显示: 下载图片/显示图片/内存缓存/磁盘缓存 下载图片\内存缓存\磁盘缓...

  • Android常用开源工具库

    一、图片缓存 Android-Universal-Image-Loader图片缓存,目前使用最广泛的图片缓存,支持...

  • iOS编程之缓存清除以及文件操作等

    1,SDWebImage图片缓存 这里简单讲解以下SDWebImage图片缓存大小计算以及清理缓存的方法 获取图片...

  • Kingfisher清理缓存功能

    我们使用开源项目Kingfisher来实现图片缓存功能。计算图片缓存和清理图片缓存也是通过Kingfisher来实...

  • SDImageCache

    SDImageCache提供了对图片的内存缓存、异步磁盘缓存、图片缓存查询等功能,下载过的图片会被缓存到内存,也可...

  • 6 单图缓存+刷新

    单张图片缓存思路先把图片缓存到本地,再获取图片大小 (GCD调度组监听下载完成) 单张图片缓存进入加载微博列表视图...

  • SDWebImage实现图片展示、缓存、清除缓存

    1.图片显示 2.图片缓存 3.检测缓存照片 4.清理图片缓存 5.下载路径与原理:

  • SDWebImage不缓存图片和不播放Gif

    不缓存图片问题: 使用SDWebImageManager的downloadImage函数下载图片时不缓存图片到沙盒...

网友评论

      本文标题:图片缓存

      本文链接:https://www.haomeiwen.com/subject/eapkhftx.html