Glide 图片框架

学习参考:https://blog.csdn.net/guolin_blog/article/details/53759439

一 基础使用

Picasso比Glide更加简洁和轻量,Glide比Picasso功能更为丰富。
没有最好的框架,只有最适合自己的框架。选择了Glide来进行学习,并且这也是Google官方推荐的图片加载框架。

 1        Glide.with(mContext).load(localImagePath)
 2                 .crossFade()//淡入淡出动画
 3                 //设置缩略图 显示原图的10%
 4                 //当全分辨率的目标图片在后台加载完全后,Glide会自动切换显示全像素的图片。
 5                 //设置缩略图 也可以是其他图片
 6                 .thumbnail(0.1f)
 7                 .centerCrop()//缩放 填充iamgeview宽高,图片可能不完全显示
 8                 .placeholder(R.drawable.ic_picture_loading)//占位图
 9                 .error(R.drawable.mis_default_error)//error图
10                 //内存缓存策略 true跳过内存缓存; false默认不跳过内存缓存:注意,跳过内存缓存,还是会缓存到硬盘
11                 .skipMemoryCache(false) 
12                 .diskCacheStrategy(DiskCacheStrategy.NONE)//磁盘缓存策略 不缓存到SD卡
13                 .dontAnimate()//取消淡入淡出动画
14                 .listener(reqlistener)
15                 .into(item_iv);

二 Glide的特性:

1 异步加载:基础功能
2 支持loading动画,占位图,加载出差图片
3 支持缓存:内存缓存策略skipMemoryCache、磁盘缓存策略diskCacheStrategy
    这个diskCacheStrategy()方法基本上就是Glide硬盘缓存功能的一切,它可以接收四种参数:
    DiskCacheStrategy.NONE: 表示不缓存任何内容。
    DiskCacheStrategy.SOURCE: 表示只缓存原始图片。
    DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。 
    DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
    上面四种参数的解释本身并没有什么难理解的地方,但是有一个概念大家需要了解,就是当我们使用Glide去加载一张图片的时候,Glide默认并不会将原始图片展示出来,而是会对图片进行压缩和转换,经过种种一系列操作之后得到的图片,就叫转换过后的图片。
    而Glide默认情况下在硬盘缓存的就是转换过后的图片,我们通过调用diskCacheStrategy()方法则可以改变这一默认行为。
4 支持设置加载图片尺寸override(200,200),glide只会将图片加载成200*200分辨率的尺寸,不管imageview的大小。
   大部分情况下不需要设置,因为Glide会自动判断ImageView的大小,然后只将这么大的图片像素加载到内存当中,帮助我们节省内存开支。
5 生命周期:与传入的context对象共生命周期,如果是activity或者fragment,当销毁时,自动取消下载(加载图片)
6 图片变换(等比例缩放)
  fitCenter:会缩放图片让两边都相等或小于ImageView的所需求的边框。图片会被完整显示,可能不能完全填充整个ImageView。
  centerCrop:会缩放图片让图片充满整个ImageView的边框,然后裁掉超出的部分。ImageVIew会被完全填充满,但是图片可能不能完全显示出。
7 圆角图片
   Glide只支持以上两种缩放,两种缩放方法其实都是调用了transform()方法,可以自定义BitmapTransformation,实现
 1 public class CornersTransform extends BitmapTransformation {
 2 
 3     private float radius;
 4 
 5     public CornersTransform(Context context) {
 6         super(context);
 7         radius = 10;
 8     }
 9 
10     public CornersTransform(Context context, float radius) {
11         super(context);
12         this.radius = radius;
13     }
14 
15     @Override
16     protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
17         return cornersCrop(pool, toTransform);
18     }
19 
20     private Bitmap cornersCrop(BitmapPool pool, Bitmap source) {
21         if (source == null) return null;
22 
23         Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
24         if (result == null) {
25             result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
26         }
27 
28         Canvas canvas = new Canvas(result);
29         Paint paint  = new Paint();
30         paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
31         paint.setAntiAlias(true);
32         RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
33         canvas.drawRoundRect(rectF, radius, radius, paint);
34         return result;
35     }
36 
37     @Override
38     public String getId() {
39         return getClass().getName();
40     }
41 
42 }
43 
44 Glide.with(this).load(list.get(0).getOriginalPath()).transform(new CornersTransform(this)).into(iv);

三 项目中应用

头像:fitCenter() ,完全显示图片,可能不填满imageview
1   Glide.with(this).load(list.get(0).getOriginalPath())
2                         .fitCenter()
3                         .placeholder(R.drawable.ic_picture_loading)
4                         .error(R.drawable.mis_default_error)
5                         .transform(new CornersTransform(this))//圆角
6                         .into(iv);

 

附件(缩略图):centerCrop() 填充imageview
1     Glide.with(mContext).load(localImagePath)
2                 .crossFade()
3                 .oversize(300,300)4                 .centerCrop()
5                 .placeholder(R.drawable.ic_picture_loading)
6                 .error(R.drawable.mis_default_error)
7                 .skipMemoryCache(false) //内存缓存策略 true关闭内存缓存; false默认不跳过内存缓存
8                 .into(item_iv);
浏览大图:imageview宽高设置fill_match,Glide设置fitCenter() ,同头像
 
posted @ 2018-06-05 18:00  随易来了  阅读(716)  评论(0)    收藏  举报