记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 ...
随机推荐
- WSGI的理解
Python web开发中,服务端程序可分为2个部分: 服务器程序(用来接收.整理客户端发送的请求) 应用程序(处理服务器程序传递过来的请求) 在开发应用程序的时候,我们会把常用的功能封装起来,成为各 ...
- C语言--关键字 typedef
一.typedef 1.基本使用 1> typedef 在基本数据类型中的使用 typedef int MyInt; // 相当于给 int 起了一个别名 typedef MyInt MyInt ...
- c#POST请求和接收post请求
c# post请求发送数据 /// <summary> /// POST请求 /// </summary> /// <param name="url" ...
- C++之------运算符重载
① 什么是运算符重载? 何为C++的运算符重载呢? 其实就是运算符给它重新赋予新的含义或者多重含义.让它有另外一种新的功能. 为什么需要运算符重载? 面向对象中为了实现类的多态性,我们就引用了运算符 ...
- js加载优化
阻塞特性: JS 有个很无语的阻塞特性,就是当浏览器在执行JS 代码时,不能同时做其他任何事情,无论其代码是内嵌的还是外部的. 脚本位置: 浏览器在碰到一个引入外部JS 文件的 ...
- 大规模集群FTP代理(基于lvs的vsftpd网络负载均衡方案部署(PASV))
[目的] 在日常工作中,我们经常需要在某服务器上开FTP(Server)服务.但就是这么简单的事情通常也会变得很复杂,原因如下:1.需要开通FTP的服务器没有公网IP地址:(即不能直接访问到)2.这样 ...
- HTTP协议及HTTP包
HTTP协议用于在Internet上发送和接收消息.HTTP协议是一种请求-应答式的协议 ——客户端发送一个请求,服务器返回该请求的应答,所有的请求与应答都是HTTP包.HTTP协议使用可靠的TCP连 ...
- Linux系统编程(6)——文件系统
计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数 ...
- bzoj1648 [Usaco2006 Dec]Cow Picnic 奶牛野餐
Description The cows are having a picnic! Each of Farmer John's K (1 <= K <= 100) cows is graz ...
- canvas动画文字效果
Doughnut Chartvar c=document.getElementById("canvas");var ctx=c.getContext("2d") ...