记glide框架使用中所遇到的问题
最近实在是太忙,每有时间写博客。记得之前写过一篇关于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找到学习资料,等下次有时间再一一介绍。
记glide框架使用中所遇到的问题的更多相关文章
- ImageView图片不显示---------记glide框架使用时遇到的问题
最近在开发项目的时候,使用了谷歌推荐的glide框架,却发现了一个莫名奇妙的问题,就是imageview始终不显示图片! 发现图片不显示 但是改为安卓本身自带的ic_launch可以显示ic_laun ...
- 安卓图片加载框架之Glide框架
Glide框架加载有两种,第一,是加载图片,第二是加载布局背景.首先我来说说第一种情况加载图片. Glide.with(getActivity()).load(lists.get(position). ...
- Android -- Glide框架详解(一)
1,使用这个框架快两年了,今天去github上去看了一下,貌似已经从3.X升级到4.X了,想着自己还没有对这个框架在博客上做过总结,所以这里打算出三篇博客来介绍,内容有基本使用.3.X与4.X的不通. ...
- SSH框架使用中存在的诡异异常
背景 相信大多数人目前都在使用Spring + Struts2/SpringMVC + Hibernate来构建项目的整体架构,但是在使用中经藏会遇到一些诡异的问题,不知道如果解决,今天我遇到了一个非 ...
- laravel框架使用中错误及解决办法总结
1.Laravel访问出错错误信息:`Warning: require(/vendor/autoload.php):failed to open stream: No such file or dir ...
- 记Spring-SpringMVC-Mybatis框架搭建
1.spring相关架包的下载 云盘下载地址:https://pan.baidu.com/s/1o8sk8Ee 官网下载地址:http://repo.springsource.org/libs-rel ...
- application context not configured for this file于spring框架使用中的原因
spring配置文件中时常会出现这个提示,翻译过来大概意思就是没有配置该文件到项目中 于是进入到Project Structure中查看 可以很明显的看到下面有个感叹号,大概意思是下面的文件没有匹配 ...
- 记_JavaEE框架应用开发期末设计(一)
日志 工作者:Black_YeJing 工作目标:实现卖家dao层的商品的增删改查(只能对自己发布的进行增删改查). 工作进程追踪: ①创建了Shop类(卖家类) ②创建了ShopDao的接口里面编写 ...
- 【Android - 框架】之Glide的使用
一.Glide简介: Glide是Google官方推荐的一个图片加载和缓存的开源库,它不仅能实现平滑的图片列表滚动效果,还支持远程图片的获取.大小调整和展示,并且可以加载GIF图片.Glide相比与U ...
随机推荐
- python解释器内建函数002
001.dict 函数来创建字典 #!/usr/bin/python #!coding:utf-8 if __name__ == "__main__": dct001=dict(h ...
- 通过Alexa API获取Alexa排名
我们通会用Alexa的网站(或其它站长工具网站)来栓查我们的网站流量排名,这样就必须去那些网站.实际上,可以通过Alexa XML API 获取网站的Alexa相关的数据(XML格式的),再使用XM ...
- 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
python IO操作的时候出现这种错误,检查一些url的目录 这个时候需要注意一下一般的dir举例是:“F:\DOCUMENT\4.7” 需要修改成为:F:/DOCUMENT/4.7
- final+基本类型导致只编译常量类引起的错误
http://jackyrong.iteye.com/blog/1813878 字节码问题.
- Tea加密算法和XxTea加密算法
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...
- 类:初识类的事件(有点不明白,怎么普通Precedure可以赋值给TEvent)
先勾画一下思路:1.建立一个类, 里面有年龄字段 FAge;2.通过 Age 属性读写 FAge;3.如果输入的年龄刚好是 100 岁, 将会激发一个事件, 这个事件我们给它命名为: OnHundre ...
- 在Activity中响应ListView内部按钮的点击事件的两种方法!!!
在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...
- First Missing Positive 解答
Question Given an unsorted integer array, find the first missing positive integer. For example,Given ...
- JNI的替代者—使用JNA访问Java外部功能接口
摘自:http://www.cnblogs.com/lanxuezaipiao/p/3635556.html JNI的替代者-使用JNA访问Java外部功能接口 1. JNA简单介绍 先说JNI(Ja ...
- 查看Java包源码