Android 图片框架

1、图片框架:Picasso、Glide、Fresco

2.介绍:

picasso:和Square的网络库能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现

Glide:模仿了Picasso的API,而且在他的基础上加了很多的扩展(比如git等支持)

Picasso能实现的功能,Glide都能实现,但Picasso体积比Glide小很多,如果项目中网络请求本身用的就是okhttp或者retrofit(本质还是okhttp),那么建议用Picasso,Glide的好处是大型的图片流,比如git、video等

Glide详解:

创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。

Glide特点:

  • 使用简单
  • 可配置度高,自适应程度高
  • 支持常见图片格式jpg、png、gif、webp
  • 支持多种资源 玩过、本地、资源、Assets等
  • 高效缓存策略 支持Memory和Disk图片缓存,默认Bitmap格式采用RGB_565内存使用至少减少一半
  • 生命周期集成 根据Activity/Fragment生命周期自动管理请求
  • 高效处理Bitmap 使用Bitmap Pool使Bitmap复用,制动调用recycle回收需要回收的Bitmap,减小系统回收压力

Glide使用:

1、添加引用build.gradle中添加配置

compile 'com.github.bumptech.glide:glide:3.7.0'

2、设置绑定生命周期

Glide.with(Context context); //绑定Context

Glide.with(Activity activity);//绑定Activity

Glide.with(FragmentActivity activity);//绑定FragmentActivity

Glide.with(Fragment fragment);//绑定Fragment

3、简单的加载图片实例

Glide.with(this).load(imgUrl).into(imageView);

4、设置加载中及加载失败图片

api里面对placeholder(),error()函数中有多态实现

Glide.with(this).load(imageUrl)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(imageView);

5、设置跳过内存缓存

Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);

6、设置下载优先级

Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);

7、设置缓存策略

Glide.with(this).load(imageUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);

策略解说:

all:缓存元资源和转换后的资源

none:不作任何磁盘缓存

source:缓存源资源

result:缓存转换后的资源

8、设置加载动画

api也提供了几个常用的动画:比如crossFade()

Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);

R.anim.item_alpha_in:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <alpha

        android:duration="500"

        android:fromAlpha="0.0"

        android:toAlpha="1.0"/>

</set>

9、设置缩略图

这样会先加载缩略图,在加载全图

Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);

10、设置加载尺寸

Glide.with(this).load(imageUrl).overrde(800,800).into(imageView);

11设置动态转换

Glide.with(this).load(imageUrl).centerCrop().into(imageView);

12、设置动态GIF加载方式

 Glide.with(this).load(imageUrl).asBitmap().into(imageView);//显示gif静态图片
 Glide.with(this).load(imageUrl).asGif().into(imageView);//显示gif动态图片

13、缓存的动态清理

 Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行
 Glide.get(this).clearMemory();//清理内存缓存  可以在UI主线程中进行

 14、加载网络图片实现等比例缩放

        Glide.with(mContext)
                .load(url)
                .asBitmap()//强制Glide返回一个Bitmap对象
                .listener(new RequestListener<String, Bitmap>() {
                    @Override
                    public boolean onException(Exception e, String s, Target<Bitmap> target, boolean b) {
                        LogUtil.e(url+"加载失败"+e.toString());
                        Glide.with(mContext)
                                .load(R.mipmap.pic_default_vertical)
                                .diskCacheStrategy(cache)
                                .into(iv);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Bitmap bitmap, String s, Target<Bitmap> target, boolean b, boolean b1) {
                        return false;
                    }
                })
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
                        int width = bitmap.getWidth();
                        int height = bitmap.getHeight();
                        int S_width =  DisplayUtil.getScreenWidth(mContext);
                        int S_height =  DisplayUtil.getScreenHeight(mContext);

                        float scale = ((float) height)/width;
                        iv.setImageBitmap(bitmap);
                        if(width>height){
                            float S_scale = S_height/(S_width*scale);
                            if(isRightToLeft){
                                iv.setScale(S_scale,S_height*S_scale,0,false);
                            }else{
                                iv.setScale(S_scale,0,0,false);
                            }

                        }
                    }
                });
原文地址:https://www.cnblogs.com/chhom/p/6069320.html