Glide 图片框架

一 基础使用

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);
三 项目中应用
图片scaletype属性设置:
头像,附件(缩略图):
浏览大图:

猜你喜欢

转载自www.cnblogs.com/suiyilaile/p/9141086.html