Glide 图片框架
Posted 随易来了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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属性设置:
头像,附件(缩略图):
浏览大图:
以上是关于Glide 图片框架的主要内容,如果未能解决你的问题,请参考以下文章