Glide使用及原理概述
来源:互联网 发布:安徽自考网络助学加分 编辑:程序博客网 时间:2024/06/03 16:33
一、概念
比较一个Glide和其他的框架
Universal Image Loader:一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛。
Picasso: Square出品,必属精品。和OkHttp搭配起来更配呦!
Volley ImageLoader:Google官方出品,可惜不能加载本地图片~
Fresco:Facebook出的,天生骄傲!不是一般的强大。
Glide:Google推荐的图片加载库,专注于流畅的滚动。
二、特点
Glide的这种默认的缓存机制有一个优点,就是它可以加快图片加载的速度(可以理解为以空间换时间),而Picasso会造成一定的延迟,因为它在加载到imageview的时候,总是需要调整大小,确实Picasso有一个立即显示图片的方法(如下所示),但是这还是消除不了延时。
Glide的一个明显的优点就是它可以加载gif图片,你可能说我用Picasso加载也不报错啊?你要注意,用Picasso加载的gif图片是不会动的,如
三、使用
1. 普通的使用方式
//(1)加载网络图片 tvGlide1.setText("(1)加载网络图片"); Glide.with(this).load("http://img1.imgtn.bdimg.com/it/u=2615772929,948758168&fm=21&gp=0.jpg").into(ivGlide1); //(2)加载资源图片 tvGlide2.setText("(2)加载资源图片"); Glide.with(this).load(R.drawable.atguigu_logo).into(ivGlide2); //(3)加载本地图片 tvGlide3.setText("(3)加载本地图片"); String path = Environment.getExternalStorageDirectory() + "/meinv1.jpg"; File file = new File(path); Uri uri = Uri.fromFile(file); Glide.with(this).load(uri).into(ivGlide3); // (4)加载网络gif tvGlide4.setText("(4)加载网络gif"); String gifUrl = "http://b.hiphotos.baidu.com/zhidao/pic/item/faedab64034f78f066abccc57b310a55b3191c67.jpg"; Glide.with(this).load(gifUrl).placeholder(R.mipmap.ic_launcher).into(ivGlide4); // (5)加载资源gif tvGlide5.setText("(5)加载资源gif"); Glide.with(this).load(R.drawable.loading).asGif().placeholder(R.mipmap.ic_launcher).into(ivGlide5); //(6)加载本地gif tvGlide6.setText("(6)加载本地gif"); String gifPath = Environment.getExternalStorageDirectory() + "/meinv2.jpg"; File gifFile = new File(gifPath); Glide.with(this).load(gifFile).placeholder(R.mipmap.ic_launcher).into(ivGlide6); //(7)加载本地小视频和快照 tvGlide7.setText("(7)加载本地小视频和快照"); String videoPath = Environment.getExternalStorageDirectory() + "/video.mp4"; File videoFile = new File(videoPath); Glide.with(this).load(Uri.fromFile(videoFile)).placeholder(R.mipmap.ic_launcher).into(ivGlide7); //(8)设置缩略图比例,然后,先加载缩略图,再加载原图 tvGlide8.setText("(8)设置缩略图比例,然后,先加载缩略图,再加载原图"); String urlPath = Environment.getExternalStorageDirectory() + "/meinv1.jpg"; Glide.with(this).load(new File(urlPath)).thumbnail(0.1f).centerCrop().placeholder(R.mipmap.ic_launcher).into(ivGlide8); //(9)先建立一个缩略图对象,然后,先加载缩略图,再加载原图 tvGlide9.setText("(9)先建立一个缩略图对象,然后,先加载缩略图,再加载原图"); DrawableRequestBuilder thumbnailRequest = Glide.with(this).load(new File(urlPath)); Glide.with(this).load(Uri.fromFile(videoFile)).thumbnail(thumbnailRequest).centerCrop().placeholder(R.mipmap.ic_launcher).into(ivGlide9);
2、使用属性
// 显示数据 int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, mContext.getResources().getDisplayMetrics()); int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200f, mContext.getResources().getDisplayMetrics()); Glide.with(mContext) .load(mDatas[position]) .placeholder(R.mipmap.ic_launcher) //占位图 .error(R.mipmap.ic_launcher) //出错的占位图 .override(width, height) //图片显示的分辨率 ,像素值 可以转化为DP再设置 .animate(R.anim.glide_anim) .centerCrop() .fitCenter() .into(holder.image);
3、进行不同的图像变换
switch (integer) { case 1: { int width = Utils.dip2px(mContext, 133.33f); int height = Utils.dip2px(mContext, 126.33f); Glide.with(mContext) .load(R.drawable.check) .override(width, height) .bitmapTransform(new CenterCrop(mContext), new MaskTransformation(mContext, R.drawable.mask_starfish)) .into(holder.image); break; } case 2: { int width = Utils.dip2px(mContext, 150.0f); int height = Utils.dip2px(mContext, 100.0f); Glide.with(mContext) .load(R.drawable.check) .override(width, height) .bitmapTransform(new CenterCrop(mContext), new MaskTransformation(mContext, R.drawable.mask_chat_right)) .into(holder.image); break; } case 3: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform( new CropTransformation(mContext, 300, 100, CropTransformation.CropType.TOP)) .into(holder.image); break; case 4: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform(new CropTransformation(mContext, 300, 100)) .into(holder.image); break; case 5: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform( new CropTransformation(mContext, 300, 100, CropTransformation.CropType.BOTTOM)) .into(holder.image); break; case 6: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform(new CropSquareTransformation(mContext)) .into(holder.image); break; case 7: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform(new CropCircleTransformation(mContext)) .into(holder.image); break; case 8: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform(new ColorFilterTransformation(mContext, Color.argb(80, 255, 0, 0))) .into(holder.image); break; case 9: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform(new GrayscaleTransformation(mContext)) .into(holder.image); break; case 10: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform(new RoundedCornersTransformation(mContext, 30, 0, RoundedCornersTransformation.CornerType.BOTTOM)) .into(holder.image); break; case 11: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new BlurTransformation(mContext, 25)) .into(holder.image); break; case 12: Glide.with(mContext) .load(R.drawable.demo) .bitmapTransform(new ToonFilterTransformation(mContext)) .into(holder.image); break; case 13: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new SepiaFilterTransformation(mContext)) .into(holder.image); break; case 14: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new ContrastFilterTransformation(mContext, 2.0f)) .into(holder.image); break; case 15: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new InvertFilterTransformation(mContext)) .into(holder.image); break; case 16: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new PixelationFilterTransformation(mContext, 20)) .into(holder.image); break; case 17: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new SketchFilterTransformation(mContext)) .into(holder.image); break; case 18: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform( new SwirlFilterTransformation(mContext, 0.5f, 1.0f, new PointF(0.5f, 0.5f))) .into(holder.image); break; case 19: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new BrightnessFilterTransformation(mContext, 0.5f)) .into(holder.image); break; case 20: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new KuwaharaFilterTransformation(mContext, 25)) .into(holder.image); break; case 21: Glide.with(mContext) .load(R.drawable.check) .bitmapTransform(new VignetteFilterTransformation(mContext, new PointF(0.5f, 0.5f), new float[]{0.0f, 0.0f, 0.0f}, 0f, 0.75f)) .into(holder.image); break; }
四、原理
Glide原理的核心是为bitmap维护一个对象池。对象池的主要目的是通过减少大对象内存的分配以重用来提高性能。对象池的概念参见对象池的使用
图片的加载任务会与activity或者Fragment的生命周期绑定,当界面执行onStop的使用自动暂定,而当执行onStart的时候又会自动重新开启,同样的,动态Gif图的加载也是如此,以用来节省电量,同时Glide会对网络状态做监听,当网络状态发生改变时,会重启失败的任务,以减少任务因网络连接问题而失败的概率。
为加快加载速度,提高体验,优先加载预览图
阅读全文
1 0
- Glide使用及原理概述
- Glide使用及说明
- NSRunLoop概述及原理
- Java NIO使用及原理之--总概述
- glide的基本使用以及原理
- glide的基本使用以及原理
- Glide 4.0 相比 Glide 3.0 及使用详解
- Android Glide图片库优缺点及使用
- Glide框架的使用及详解
- Glide的介绍及基本使用
- Glide使用简介及流程分析
- COM原理及应用----概述
- COM原理及应用----概述
- COM原理及应用----概述
- 代理服务器概述及工作原理
- DRBD原理及特性概述
- Glide解析-概述
- 【Glide】使用
- VUE快速入门心得——组件之间传递数据(2. 自定义事件)
- java学习中对多态的理解
- cursor的遍历时moveToFirst和moveToNext的区别
- C/C++动态内存管理
- linux入门篇--用户及用户组的管理
- Glide使用及原理概述
- sybase 公司在线帮助
- 5.冲突解决
- LightOJ 1027A Dangerous Maze
- 滑动滚出页面
- 继承之猫狗案例
- 服务端后台运行 nodejs
- java实现HTML标签转义和反转义(StringEscapeUtils)
- A