使用Glide加载、缓存图片、解决背景出现浅绿色
2016-11-15 15:42
465 查看
之前一直使用Volley ImageLoader、或者Picasso,无意间发现Glide,觉得真的是棒棒的。
2
1
2
都可以看到我不只是添加了一个依赖,还有V4包的依赖,因为它要借助V4包工作。
Glide不仅可以加载网络的图片,还可以加在本地的资源,文件资源,最重要的是还可以加在GIF格式的图片。
1)Glide加载网络图片
2
3
4
1
2
3
4
2)从资源中加载图片
2
3
4
1
2
3
4
3)从文件中加载
2
3
4
5
6
7
1
2
3
4
5
6
7
4)从Uri中加载
2
3
4
5
6
7
1
2
3
4
5
6
7
将id转换成Uri
2
3
4
5
6
1
2
3
4
5
6
5)加载GIF图片
加载gif图片和加载正常的图片没有什么太大的区别
2
3
4
5
1
2
3
4
5
这里我们可以稍做改动
2
3
4
5
1
2
3
4
5
如果图片不会自动适配到 ImageView,调用 override(horizontalSize, verticalSize) 。这将在图片显示到 ImageView之前重新改变图片大小。
2
3
4
5
1
2
3
4
5
CenterCrop()是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内并且侧键额外的部分。ImageView 可能会完全填充,但图像可能不会完整显示。
2
3
4
5
1
2
3
4
5
fitCenter() 是裁剪技术,即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围。该图像将会完全显示,但可能不会填满整个 ImageView。
2
3
4
5
1
2
3
4
5
就是说我可以先加载图片的百分之多少来显示,然后在加载原图,用户体验比较好嘿嘿
2
3
4
5
1
2
3
4
5
例如, 你传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。如果原始图像有 1000x1000 像素,那么缩略图将会有 100x100 像素。因为这个图像将会明显比 ImageView 小很多,你需要确保它的 ScaleType 的设置是正确的。
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
2
3
4
5
1
2
3
4
5
如果看到这样的异常You cannot start a load for a destroyed activity
请记住一句话:不要再非主线程里面使用Glide加载图片,如果真的使用了,请把context参数换成getApplicationContext。
原因:
Glide默认的Bitmap格式是RGB_565,这也是导致在加载图片是可能变绿的罪魁祸首。RGB_565代表8位RGB位图,而Picasso默认的Bitmap格式是ARGB_8888代表32位RGB位图,位图位数越高代表其可以存储的颜色信息越多,图像也就越逼真,这也是Picasso图像质量更好的原因了。
方案:
1、使用Glide加载图片时:
2
3
4
1
2
3
4
2、如果加上这一句代码图片仍然没有解决,可以将Bitmap的格式改为ARGB_8888。
首先创建一个 GlideConfiguration类去实现GlideModule,修改Bitmap的格式。
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
然后在AndroidManifest.xml中加入:
2
3
1
2
3
提供两个链接:
Glide详解
一些常见问题
Glide加载图片出现浅绿色背景
转自:http://blog.csdn.net/hello_1s/article/details/52291363
1、和其他的一样在Module的build.gradle中添加依赖
compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:23.3.0'1
2
1
2
都可以看到我不只是添加了一个依赖,还有V4包的依赖,因为它要借助V4包工作。
2、Glide的使用和Picasso的使用十分相似都是.with().load.into()
Glide不仅可以加载网络的图片,还可以加在本地的资源,文件资源,最重要的是还可以加在GIF格式的图片。1)Glide加载网络图片
Glide .with(context) .load("http://img.sc115.com/dm/pc/pic/1502shayikbbuw1.jpg") .into(mImageView);1
2
3
4
1
2
3
4
2)从资源中加载图片
Glide .with(context) .load(R.mipmap.image) .into(mImageView);1
2
3
4
1
2
3
4
3)从文件中加载
//这个文件可能不存在于你的设备中。然而你可以用任何文件路径,去指定一个图片路径。 File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "20160323153033.jpg"); Glide .with(context) .load(file) .into(mImageView);1
2
3
4
5
6
7
1
2
3
4
5
6
7
4)从Uri中加载
//这可能是任何 Uri为了演示的目的我们只是用一个 launcher icon 去创建了一个 Uri Uri uri = resourceIdToUri(context, R.mipmap.image); Glide .with(context) .load(uri) .into(mImageView);1
2
3
4
5
6
7
1
2
3
4
5
6
7
将id转换成Uri
public static final String ANDROID_RESOURCE = "android.resource://"; public static final String FOREWARD_SLASH = "/"; private static Uri resourceIdToUri(Context context, int resourceId) { return Uri.parse(ANDROID_RESOURCE + context.getPackageName() + FOREWARD_SLASH + resourceId); }1
2
3
4
5
6
1
2
3
4
5
6
5)加载GIF图片
加载gif图片和加载正常的图片没有什么太大的区别
String gifUrl = "http://pic.qqtn.com/file/2013/2014-12/2014122616202514075.gif"; Glide .with( context ) .load( gifUrl ) .into( imageViewGif );1
2
3
4
5
1
2
3
4
5
这里我们可以稍做改动
//如果你期望这个 URL 是一个 Gif,Glide 不会自动检查是否是 Gif,所以强制转换 Glide.with( context ).load( gifUrl ).asGif().into( imageViewGif ); //显示的是GIF动画的第一帧,就是静止的图片 Glide.with( context ).load( gifUrl ).asBitmap().into( imageViewGif );1
2
3
4
5
1
2
3
4
5
3、图片的加载会了,接下来看看如何设置图片的大小
如果图片不会自动适配到 ImageView,调用 override(horizontalSize, verticalSize) 。这将在图片显示到 ImageView之前重新改变图片大小。Glide .with(context) .load("http://p1.wmpic.me/article/2016/08/15/1471243206_FGLNjRtg_215x185.jpg") .override(600, 200) .into(mImageView);1
2
3
4
5
1
2
3
4
5
4、图像的缩放
CenterCrop()是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内并且侧键额外的部分。ImageView 可能会完全填充,但图像可能不会完整显示。Glide .with(context) .load(R.mipmap.image) .centerCrop() .into(imageViewResizeCenterCrop);1
2
3
4
5
1
2
3
4
5
fitCenter() 是裁剪技术,即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围。该图像将会完全显示,但可能不会填满整个 ImageView。
Glide .with(context) .load(R.mipmap.image) .fitCenter() .into(imageViewResizeFitCenter);1
2
3
4
5
1
2
3
4
5
5、缩略图
就是说我可以先加载图片的百分之多少来显示,然后在加载原图,用户体验比较好嘿嘿Glide .with( context ) .load( "http://img.sc115.com/dm/pc/pic/1502shayikbbuw1.jpg" ) .thumbnail(0.1f) .into(mImageView);1
2
3
4
5
1
2
3
4
5
例如, 你传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。如果原始图像有 1000x1000 像素,那么缩略图将会有 100x100 像素。因为这个图像将会明显比 ImageView 小很多,你需要确保它的 ScaleType 的设置是正确的。
6、我们通过网络得到的图片有的时候不一定就直接设置到ImageView上,有的时候就只是要一个Bitmap
//当Glide加载完会被调用 private SimpleTarget target = new SimpleTarget<Bitmap>(){ @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { //使用bitmap做一些事,如 mImageView.setImageBitmap(resource); } };1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
Glide .with(this) .load("http://img.sc115.com/dm/pc/pic/1502shayikbbuw1.jpg") .asBitmap() //必须写,否则会报类型转化异常 .into(target); //此处为target1
2
3
4
5
1
2
3
4
5
7、注意
如果看到这样的异常You cannot start a load for a destroyed activity 请记住一句话:不要再非主线程里面使用Glide加载图片,如果真的使用了,请把context参数换成getApplicationContext。
8、Glide加载图片背景出现浅绿色现象
原因:Glide默认的Bitmap格式是RGB_565,这也是导致在加载图片是可能变绿的罪魁祸首。RGB_565代表8位RGB位图,而Picasso默认的Bitmap格式是ARGB_8888代表32位RGB位图,位图位数越高代表其可以存储的颜色信息越多,图像也就越逼真,这也是Picasso图像质量更好的原因了。
方案:
1、使用Glide加载图片时:
Glide.with(context) .load(url) .diskCacheStrategy(DiskCacheStrategy.SOURCE)//是将图片原尺寸缓存到本地。 .into(imageview);1
2
3
4
1
2
3
4
2、如果加上这一句代码图片仍然没有解决,可以将Bitmap的格式改为ARGB_8888。
首先创建一个 GlideConfiguration类去实现GlideModule,修改Bitmap的格式。
public class GlideConfiguration implements GlideModule{ @Override public void applyOptions(Context context, GlideBuilder builder) { builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888); } @Override public void registerComponents(Context context, Glide glide) { } }1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
然后在AndroidManifest.xml中加入:
<meta-data android:name="你的包名.GlideConfiguration" android:value="GlideModule"/>1
2
3
1
2
3
提供两个链接:
Glide详解
一些常见问题
Glide加载图片出现浅绿色背景
转自:http://blog.csdn.net/hello_1s/article/details/52291363
相关文章推荐
- 使用Glide加载、缓存图片、Gif、解决背景出现浅绿色、GlideModules冲突
- 解决使用Glide加载图片背景出现浅绿色
- Glide使用心得——加载图片出现浅绿色背景问题和Glide加载完成的监听设置
- Android 平滑图片加载和缓存库 Glide 使用详解
- 使用开源框架 Glide 加载与缓存图片
- ListView优化使用imageLoader下载和缓存图片,图片异步加载,解决图片多了之后容易卡顿。
- Android 平滑图片加载和缓存库 Glide 使用详解
- Android 平滑图片加载和缓存库 Glide 使用详解
- Android 平滑图片加载和缓存库 Glide 使用详解
- 使用加载图片解决在Ajax数据加载中页面出现短暂空白的问题(推荐)
- 菜鸟之路-Listview使用缓存加载网络图片错位Bug解决
- Android 平滑图片加载和缓存库 Glide 使用详解
- Android平滑图片加载和缓存库 Glide 使用详解
- Android平滑图片加载和缓存库Glide使用详解
- Android平滑图片加载和缓存库 Glide 使用详解
- Android应用架构之Retrofit使用 RxJava 详解 jsoup Android 平滑图片加载和缓存库 Glide 使用详解
- MFC中CImage加载png图片出现黑色背景的解决办法!
- Android 平滑图片加载和缓存库 Glide 使用详解
- QWebView中出现加载网页乱码、图片加载不出来的问题解决以级QMainWindow背景图片设置问题
- Glide加载图片缓存库出现——You cannot start a load for a destroyed activity