基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)

基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)

本案例是基于Volley网络库实现的加载多种网络图片,目前包括GIF动态图片、圆形图片、普通图片,还有待完善,欢迎提意见,或者一块儿完成。android

前言

对于Volley,我相信咱们都使用过,它也是Google推荐的网络加载框架,性能优秀。另外,咱们也知道Volley能够加载网络图片,正常状况下,可使用ImageRequest的用法、ImageLoader的用法和NetworkImageView的用法来加载网络图片。可是,有时候咱们项目中加载图片可能须要不一样的需求,因此我就在这基础上修改完成了加载多样化的网络图片的功能。固然如今Glide加载图片也是很是的好,Google也推荐了。git

Github项目地址,欢迎star,欢迎一块儿完善github

图片描述

一、修改ImageLoad与ImageRequeat

Volley中图片请求操做主要与ImageLoad与ImageRequeat这两个文件有关系,可是其中返回的是Bitmap对象,咱们要修给使得返回缓冲区的ByteBuffer流。以下:缓存

public interface ImageCache {
        ByteBuffer getBitmap(String url);
        void putBitmap(String url, ByteBuffer bitmap);
    }

二、基于LruCache实现内存缓存

具体的写法与Volley使用ImageLoad时缓存相似网络

public class LruImageCache extends LruCache<String, ByteBuffer> implements ImageLoader.ImageCache {
    
    public LruImageCache(int maxSize) {
        super(maxSize);
    }
    
    @Override
    protected int sizeOf(String key, ByteBuffer value) {
        return value.capacity();
    }
    
    @Override
    public ByteBuffer getBitmap(String url) {
        return get(url);
    }

    @Override
    public void putBitmap(String url, ByteBuffer bitmap) {
        put(url, bitmap);
    }
}

三、新建一个AsyncTask从缓存中数据流到UI显示图片

主要判断是否为GIF图片,若是是则加载,另外还要判断是否为圆形图片,若是是则加载框架

// 判断是否为GIF图片,若是是则加载
            if ( LoadGif.isGif(mImageView, bytes) )
                return;

            Bitmap image = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
            //判断是否为圆形图片,若是是则加载
            if(isCircle){
                mImageView.setImageBitmap(LoadGif.toRoundBitmap(image));
            }else{
                mImageView.setImageBitmap(image);
            }

四、感谢

最后,要感谢koral--本文的GIF图片显示库,就是这位大神的。koral--的Github
Gif图片加载采用koral--实现的android-gif-drawable ,此库底层使用C库进行Gif的编解码,效率和显示效果方面都很是棒。ide

相关文章
相关标签/搜索