基於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

相關文章
相關標籤/搜索