最近实在是太忙,每有时间写博客。记得之前写过一篇关于glide加载图片不显示的博客,但是给出最终的解决方法。这次我将把在项目中使用glide所遇到的问题总结一下。

1.使用glide最好对glide进行全局的配置,此时需要写一个继承GlideModule的GlideModelConfig类

public class GlideModelConfig implements GlideModule{
int diskSize = 1024 * 1024 * 100;
int memorySize = (int) (Runtime.getRuntime().maxMemory()) / 8; // 取1/8最大内存作为最大缓存
@Override
public void applyOptions(Context context, GlideBuilder builder) {
// 默认内存和图片池大小
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = calculator.getMemoryCacheSize(); // 默认内存大小
int defaultBitmapPoolSize = calculator.getBitmapPoolSize(); // 默认图片池大小
builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize)); // 该两句无需设置,是默认的
builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize));
//定义图片的本地磁盘缓存
File cacheDir = context.getExternalCacheDir();//指定的是数据的缓存地址
int diskCacheSize = 1024 * 1024 * 30;//最多可以缓存多少字节的数据
//设置磁盘缓存大小
builder.setDiskCache(new DiskLruCacheFactory(cacheDir.getPath(), "glide", diskCacheSize));
// 定义缓存大小和位置
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskSize)); //内存中
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "cache", diskSize)); //sd卡中
// 定义图片格式
builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565); // 默认
// 自定义内存和图片池大小
builder.setMemoryCache(new LruResourceCache(memorySize));
builder.setBitmapPool(new LruBitmapPool(memorySize));
//builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
} @Override
public void registerComponents(Context context, Glide glide) { }
}

还得再在清单文件中,对该类进行配置

<meta-data
android:name="com.***.GlideModelConfig"
android:value="GlideModule"/>

2.当你使用的图片控件为CircleImagview的时候,会出现第一加载图片失败,当你再次下拉刷新的时候,才能展现出图片,此时的解决办法有以下几种

  a.使用Imagview,如果你想使imagview变成圆形,有以下两种常用方法

    1.使用xml的shape(此方法比较简单)

    2.第二使用glide自带的圆形转化类

     代码如下

private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
// TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size); Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
} Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
} @Override
public String getId() {
return getClass().getName();
}
}

再在glide的使用中使用该类

 /**
* 头像设置成圆角
*
* @param url
* @param context
* @param imageView
*/
public static void downLoadPicCircle1(String url, Context context, ImageView imageView) {
Glide.with(context)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.mipmap.touxiang)
.error(R.mipmap.touxiang)
.transform(new CircleTransform(context))
.into(imageView);
}

这样iamgview就可以转化为圆形了。

2.第二个方法就是我上次使用glide所提出的解决方法,不要设置占位 http://www.cnblogs.com/jiutiankunpeng/p/5715201.html

ps:网上还有大神提出了如下代码的解决方法

Glide.with(mContext)
.load(url)
.placeholder(R.drawable.loading_spinner)
.into(new SimpleTarget<Bitmap>(width, height) {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
// setImageBitmap(bitmap) on CircleImageView
}
};

3.在使用glide的时,又是程序会莫名其妙的崩溃,studio会提示如下错误 You cannot start a load for a destroyed activity

这个问题的解决方法是,将with(context)换成with(getAppliationContext),这样就不会爆这个错误了。

4.在glide中加入try catche(下面的代码,是使用glide加载本地图片)

public static void loadImage(@IdRes int resId, ImageView imageView) {
try {
Glide.with(imageView.getContext())
.load(resId)
.dontAnimate()//直接显示图片而没有任何淡入淡出效果
.placeholder(R.drawable.default_diagram)
.into(imageView);
} catch (Exception e) { } }

最后,glide 还有很多其他知识,如内存的缓存策略,图片裁剪( override),请求图片的优先级等,一系列问题,这些东西大家都可以使用google找到学习资料,等下次有时间再一一介绍。

最新文章

  1. python基础六
  2. .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  3. 【原创】js中利用cookie实现记住密码功能
  4. Centos7 搭建 Keepalived+LVS 备注
  5. Ubuntu 14.10 下查看系统硬件信息(实例详解)
  6. L - Fabled Rooks(中途相遇法和贪心)
  7. 取消本地SVN文件夹与服务器关联
  8. (转载)AS3领航系列教程 之 AS3程序的入口
  9. mysql数据类型——整型INT(m)
  10. outlook自动备份
  11. Base64图片转Blob对象
  12. 六、es6 map
  13. NetCore平台下使用RPC框架Hprose
  14. linux 内核crash 命令
  15. 【组队赛三】-D 优先队列 cf446B
  16. Storm概念、原理详解及其应用(一)BaseStorm
  17. PyCharm在win10的64位系统安装实例
  18. webstorm设置修改文件后自动编译并刷新浏览器页面
  19. jsp数据显示分页
  20. PL/SQL 训练10--io及文件操作

热门文章

  1. python一句代码建立树
  2. ubuntu下安装fiddler
  3. 开源C/C++网络库比较
  4. 产生n bit所有可能的序列
  5. windows查看端口占用情况及查杀进程
  6. Unity 角色复活和重新开始游戏
  7. Unity 接MM横屏闪退的原因
  8. mysql的wait_timeout配置
  9. indesign 注意事项
  10. [jQuery] 自做 jQuery Plugin - Part 1