之前的项目一直是使用ImageLoader,通过在Application初始化配置就可以搞定基本所有的东西.
Glide好像和ImageLoader不太一样,使用整理如下:
导包:
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:25.3.1'
配置硬盘缓存位置和内容缓存
就是通过GlideModule来实现的,代码如下;
步骤一
/**
* @author 王诛魔 2017/4/20 上午9:24
* @e-mail phyooos@163.com
*/
public class GlideLoaderModule implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
int maxMemory = (int) Runtime.getRuntime().maxMemory();
int memoryCacheSize = maxMemory / 8;
File cacheDir = new File(Constants.IMAGE_PATH);
if(!cacheDir.exists()){
cacheDir.mkdirs();
}
int diskCacheSize = 1024 * 1024 * 512;
builder.setMemoryCache(new LruResourceCache(memoryCacheSize));
builder.setDiskCache(new DiskLruCacheFactory(cacheDir.getPath(), "Images", diskCacheSize));
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
上面的代码就是设置,在Constants.IMAGE_PATH的位置有一个文件夹,大小就是int diskCacheSize = 1024 * 1024 * 512;
步骤二
需要在AndroidManifest.xml文件中配置meta-data
文档说Glide是通过扫描AndroidManifest文件来加载配置的
<manifest>
...
<application>
...
<meta-data
android:name="com.phyooos.app.utils.GlideLoaderModule"
android:value="GlideModule"/>
</application>
</manifest>
封装使用
但是使用的时候就发现,这个默认图和错误图,每一次加载图片的时候都要写上,十分不方便
再者,我怕我又心血来潮换加载图片的框架,所以就加上了一个中间层
/**
* Glide的工具类
* @author 王诛魔 2017/4/20 下午1:27
* @e-mail phyooos@163.com
*/
public class ImageLoader {
/**
* 加载网络图片
* @param context Context
* @param url 图片地址
* @return DrawableRequestBuilder<String>
*/
public static DrawableRequestBuilder<String> LoaderImg(@NonNull Context context,@NonNull String url){
return Glide.with(context)
.load(url)
.crossFade() //淡入淡出
.error(R.drawable.default_images_loading) //错误加载
.placeholder(R.drawable.default_images_loading); //加载图
}
/**
* 加载GIF
* @param context Context
* @param url 图片地址
* @return DrawableRequestBuilder<String>
*/
public static GifRequestBuilder<String> LoaderGif(@NonNull Context context, @NonNull String url){
return Glide.with(context)
.load(url)
.asGif()
.crossFade() //淡入淡出
.error(R.drawable.default_images_loading) //错误加载
.placeholder(R.drawable.default_images_loading); //加载图
}
/**
* 加载本地File图片
* @param context Context
* @param url 图片地址
* @return DrawableRequestBuilder<File>
*/
public static DrawableRequestBuilder<File> LoaderSD(@NonNull Context context,@NonNull String url){
File file = new File(url);
return Glide.with(context)
.load(file)
.crossFade() //淡入淡出
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.default_images_loading) //错误加载
.placeholder(R.drawable.default_images_loading); //加载图
}
/**
* 加载本地Res图片
* @param context Context
* @param res DrawableRes
* @return DrawableRequestBuilder<Integer>
*/
public static DrawableRequestBuilder<Integer> LoaderRes(@NonNull Context context,@DrawableRes int res){
return Glide.with(context)
.load(res)
.crossFade() //淡入淡出
.error(R.drawable.default_images_loading) //错误加载
.placeholder(R.drawable.default_images_loading); //加载图
}
/**
* 清空内存缓存
* @param context Context
*/
public static void clearMemory(@NonNull Context context){
Glide.get(context).clearMemory();
}
/**
* 清空内存缓存
* @param context Context
*/
public static void clearDiskCache(@NonNull Context context){
Glide.get(context).clearDiskCache();
}
}
只有几个常用的操作,还不是很完善,后面使用的过程中再去完善它
以上入门,至于后续学习推荐
MrFu Blog傅圆的博客,系列文章Glide - 系列综述
网友评论