Glide的使用
来源:互联网 发布:python 文件读写 删除 编辑:程序博客网 时间:2024/06/04 18:17
Glide的配置:
转载自
http://www.cnblogs.com/itgungnir/p/6210882.html
使用Glide首先需要导入Glide的依赖,在build.gradle文件中添加:
compile ‘com.github.bumptech.glide:glide:3.7.0’
Glide为我们提供了一个GlideModule接口,其中提供了一系列Glide配置的抽象方法,我们可以创建一个类实现这个接口,并在实现的方法中设置Glide的一些配置项,如自定义缓存大小和位置、自定义内存和图片池大小、自定义图片格式等。一个GlideModule的实现类样板如下:
public class GlideConfig implements GlideModule {
int diskSize = 1024 * 1024 * 100;
int memorySize = (int) (Runtime.getRuntime().maxMemory()) / 8; // 取1/8最大内存作为最大缓存
@Overridepublic void applyOptions(Context context, GlideBuilder builder) { // 定义缓存大小和位置 builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskSize)); // 内存中 // builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "cache", diskSize)); // sd卡中 // 默认内存和图片池大小 // MemorySizeCalculator calculator = new MemorySizeCalculator(context); // int defaultMemoryCacheSize = calculator.getMemoryCacheSize(); // 默认内存大小 // int defaultBitmapPoolSize = calculator.getBitmapPoolSize(); // 默认图片池大小 // builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize)); // builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize)); // 自定义内存和图片池大小 builder.setMemoryCache(new LruResourceCache(memorySize)); // 自定义内存大小 builder.setBitmapPool(new LruBitmapPool(memorySize)); // 自定义图片池大小 // 定义图片格式 // builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888); builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565); // 默认}@Overridepublic void registerComponents(Context context, Glide glide) {}
}
GlideConfig类完成之后,我们需要在Manifest文件中注册这个类,便于Glide找到这个类并进行初始化配置。在Manifest的标签下添加一个标签,在其中注册这个类:
<meta-data android:name="com.example.itgungnir.testglide.GlideConfig" android:value="GlideModule" />
到此为止,Glide的基础配置就完成了。
Glide的使用:
Glide中的常用方法如下:
.with() 图片加载的环境:1,Context对象。2,Activity对象。3,FragmentActivity对象。4,Fragment对象
**.load() 加载资源:1,drawable资源。2,本地File文件。3,uri。4,网络图片url。5,byte数组(可以直接加载GIF图片)
.placeholder() 图片占位符
.error() 图片加载失败时显示
.crossFade() 显示图片时执行淡入淡出的动画默认300ms
.dontAnimate() 不执行显示图片时的动画
.override() 设置图片的大小
.centerCrop() 和 fitCenter() 图片的显示方式
.animate() view动画 2个重构方法
.transform() bitmap转换
.bitmapTransform() bitmap转换。比如旋转,放大缩小,高斯模糊等(当用了转换后你就不能使用.centerCrop()或.fitCenter()了。)
.priority(Priority.HIGH) 当前线程的优先级
.signature(new StringSignature(“ssss”))
.thumbnail(0.1f) 缩略图,3个重构方法:优先显示原始图片的百分比(10%)
.listener() 异常监听
.into() 图片加载完成后进行的处理:1,ImageView对象。2,宽高值。3,Target对象**
其他方法解释:
.asBitmap()和.asGif()
如果调用了.asBitmap()方法,则.load()中的参数指向的可以是一个静态图片也可以是GIF图片,如果是一张GIF图片,则加载之后只会展示GIF图片的第一帧
如果调用的.asGif()方法,则.load()方法中的参数指向的必须是一个GIF图片,如果是一张静态图片,则图片加载完成之后展示的只是图片占位符(如果没有设置图片占位符,则什么也不展示)
这两个方法中只能调用一个,调用了其中一个方法之后,代码提示就不会提示另一个了。代码:
Glide.with(MainActivity.this) // 在MainActivity中调用Glide的API
.load(IMAGE_STATIC_URL) // 加载网络中的静态图片
.asBitmap() // 将图片固定成静态图片
.placeholder(R.mipmap.ic_launcher) // 图片占位符
.into(iv); // 图片加载完成后直接放到ImageView对象iv中进行展示
.override()
这个方法可以设置图片加载之后展示的宽度值和高度值,前提是目标ImageView的宽度和高度都设置为wrap_content。代码:
Glide.with(MainActivity.this) // 在MainActivity中调用Glide的API .load(IMAGE_STATIC_URL) // 加载网络中的静态图片 .override(666, 666) // 设置加载之后的图片显示的宽度和高度 .placeholder(R.mipmap.ic_launcher) // 图片占位符 .into(iv); // 图片加载完成后直接放到ImageView对象iv中进行展示
.thumbnail()
设置这个方法之后,可以先加载这张图片的sizeMultiplier倍的缩略图到目标ImageView中,然后再慢慢加载完整的图片。sizeMultiplier值的范围是0~1。代码:
Glide.with(MainActivity.this) // 在MainActivity中调用Glide的API .load(IMAGE_STATIC_URL) // 加载网络中的静态图片 .thumbnail(0.1f) // 先加载一定比例的缩略图 .placeholder(R.mipmap.ic_launcher) // 图片占位符 .into(iv); // 图片加载完成后直接放到ImageView对象iv中进行展示
.animate()
加载图片时展示的动画,可以是Animator类型的属性动画,也可以是int类型的动画资源。这个动画只在第一次加载的时候会展示,以后都会从缓存中获取图片,因此也就不会展示动画了。代码:
Glide.with(MainActivity.this) // 在MainActivity中调用Glide的API .load(IMAGE_STATIC_URL) // 加载网络中的静态图片 .animate(android.R.anim.slide_in_left) // 图片加载完成后的动画效果(从左侧滑入) .into(iv); // 图片加载完成后直接放到ImageView对象iv中进行展示
.centerCrop()和.fitCenter()
如果调用了.centerCrop()方法,则显示图片的时候短的一边填充容器,长的一边跟随缩放
如果调用了.fitCenter()方法,则显示图片的时候长的一边填充容器,短的一边跟随缩放
这两个方法可以都调用,如果都调用,则最终显示的效果是后调用的方法展示的效果。代码:
Glide.with(MainActivity.this) // 在MainActivity中调用Glide的API .load(IMAGE_STATIC_URL) // 加载网络中的静态图片 .fitCenter() // 长的一边填充容器 .centerCrop() // 短的一边填充容器 .into(iv); // 图片加载完成后直接放到ImageView对象iv中进行展示
.bitmapTransform()
.bitmapTransform()方法中传入的参数是一组Transformation类型的对象,即转换器,可以是任意多个。要想使用Glide为我们提供的转换器,我们需要先在build.gradle文件中导入Glide的Transformations的依赖:
compile ‘jp.wasabeef:glide-transformations:1.0.6’
这个依赖中为我们提供了很多的转换器,如下:
**圆形:CropCircleTransformation
方形:CropSquareTransformation
圆角:RoundedCornersTransformation
颜色覆盖:ColorFilterTransformation
置灰:GrayscaleTransformation
毛玻璃:BlurTransformation**
使用转换器的时候直接new就可以了,但是需要传入一个BitmapPool的对象,我们可以直接传入一个new的LruBitmapPool。例如,我们想得到一个圆形图片的转换器,就可以编写如下代码:
LruBitmapPool pool = new LruBitmapPool((int) (Runtime.getRuntime().maxMemory()) / 8);
Glide.with(MainActivity.this) // 在MainActivity中调用Glide的API
.load(IMAGE_STATIC_URL) // 加载网络中的静态图片
.fitCenter() // 长的一边填充容器
.centerCrop() // 短的一边填充容器
.bitmapTransform(new CropCircleTransformation(pool)) // 转换器
.into(iv); // 图片加载完成后直接放到ImageView对象iv中进行展
.resumeRequests()和.pauseRequests()
这两个方法是为了保证用户界面的滑动流畅而设计的。当在ListView中加载图片的时候,如果用户滑动ListView的时候继续加载图片,就很有可能造成滑动不流畅、卡顿的现象,这是由于Activity需要同时处理滑动事件以及Glide加载图片。Glide为我们提供了这两个方法,让我们可以在ListView等滑动控件滑动的过程中控制Glide停止加载或继续加载,可以有效的保证界面操作的流畅。
我们需要在ListView的OnScrollListener中写这部分的代码,如下(Adapter中的代码就不贴出来了):
// ListView滑动时触发的事件 lv.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: case AbsListView.OnScrollListener.SCROLL_STATE_FLING: // 当ListView处于滑动状态时,停止加载图片,保证操作界面流畅 Glide.with(MainActivity.this).pauseRequests(); break; case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: // 当ListView处于静止状态时,继续加载图片 Glide.with(MainActivity.this).resumeRequests(); break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
- Android - Glide的使用
- Android - Glide的使用
- Glide 的基本使用
- Glide的简单使用
- Glide的使用
- Glide的使用
- Glide的简单使用
- Glide的使用
- Glide的使用
- glide的基本使用
- Glide的使用详解
- Glide的使用
- Glide的使用大全
- Glide的使用
- Glide的使用
- Glide的简单使用
- Glide的使用
- Glide的简单使用
- 用户注册时,Yii利用AJAX页面实时提示用户名已经存在
- C++十字链表实现有向图
- C发展史:K&R C/C89/C99/C11 以及 C++发展史: C++98/C++03/C++11
- 全面了解CPPUnit
- postgresql查询栅格数据范围(extent)
- Glide的使用
- OPTIONS 方法在跨域请求(CORS)中的应用
- 3GPP窄带物联网(NB-IoT)入门手册
- ajax
- Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
- HTTP协议详解
- html学习文档总结
- 大数据处理为何选择Spark,而不是Hadoop
- 设计模式之状态模式