美文网首页源码分析Android知识Android开发
图片加载利器之Picasso(三)进阶

图片加载利器之Picasso(三)进阶

作者: landptf | 来源:发表于2017-03-08 23:58 被阅读141次

    转载请注明出处:http://www.jianshu.com/p/795ffdaf7104

    这篇文章中我们来继续学习Picasso中还提供了哪些扩展功能,一个好的框架一定是扩展性强的,你需要的我刚好有。

    下面看一下都提供了哪些扩展功能呢?

    Picasso内部采用了建造者模式,所以我们只看Builder内部类都提供了哪些方法即可

    1 defaultBitmapConfig(Bitmap.Config bitmapConfig)

    设置像素格式,Picasso的默认格式为ARGB_8888,我们知道采用这个值一个像素占用4个字节,可以使用RGB_565来替换,这样可以节省一半的内存开销,当然图片质量还是有一定损失的。

    2 downloader(Downloader downloader)

    自定义下载器,默认OkHttp,具体的实现类是OkHttpDownloader

    3 executor(ExecutorService executorService)

    线程池,默认的实现是PicassoExecutorService, 这里面会根据不同的网络情况来设置核心线程和最大线程数,最大为4,最小为1,默认为3.

    4 memoryCache(Cache memoryCache)

    缓存策略,默认实现为LruCache,LRU(最近最少未使用算法)目前在内存缓存这块使用的还是非常广泛的。

    5 listener(Listener listener)

    图片加载失败的一个回调事件,回调方法为onImageLoadFailed(Picasso picasso, Uri uri, Exception exception)

    6 requestTransformer(RequestTransformer transformer)

    请求的转换,在request被提交之前进行转换

    7 addRequestHandler(RequestHandler requestHandler)

    自定义加载图片的来源,默认为我们实现了7个,分别如下:

    ResourceRequestHandler
    ContactsPhotoRequestHandler
    MediaStoreRequestHandler
    ContentStreamRequestHandler
    AssetRequestHandler
    FileRequestHandler
    NetworkRequestHandler

    以上方法的调用方式如下

    Picasso picasso = new Picasso.Builder(this)
            .defaultBitmapConfig(Bitmap.Config.RGB_565)
            .downloader(downloader)
            .executor(executotService)
            .memoryCache(cache)
            .listener(new Picasso.Listener() {
                @Override
                public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
    
                }
            })
            .requestTransformer(new Picasso.RequestTransformer() {
                @Override
                public Request transformRequest(Request request) {
                    return null;
                }
            })
            .addRequestHandler(requestHandler)
            .build();
    Picasso.setSingletonInstance(picasso);
    picasso.load(imageUrl).into(imageView);
    

    在RequestCreator中也有几个可以自定义的方法,上篇博客中未涉及到,这里统一列出来

    1 config(Bitmap.Config config)

    同上面的defaultBitmapConfig(Bitmap.Config bitmapConfig)效果完全一样,两种方式都可以设置,defaultBitmapConfig(Bitmap.Config.RGB_565)倾向于全局设置,而config(Bitmap.Config.RGB_565)只对单次请求生效

    2 transform(Transformation transformation)

    图片转换,一般我们得到图片之后,在显示之前还可以进一步转换,比如进行一些色彩处理,改变形状等等。

    以上方法的调用方式如下

    Picasso.with(this)
            .load(imageUrl)
            .config(Bitmap.Config.RGB_565)
            .transform(transform)
            .into(imageView);
    
    RGB_565

    好了,到这里Picasso的功能基本介绍完了,接下来我们将从源码的角度去学习内部的实现。

    相关文章

      网友评论

        本文标题:图片加载利器之Picasso(三)进阶

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