写点什么

android 图片加载库 Glide4 使用教程(项目中如何快速将 Glide3 替换成 Glide4)

用户头像
Android架构
关注
发布于: 2021 年 11 月 07 日
  • 获取 gif 第一帧


/**


  • 注意:在 Glide 3 中的语法是先 load()再 asBitmap()的,

  • 而在 Glide 4 中是先 asBitmap()再 load()的

  • 如果写错了顺序就肯定会报错了


*/


Glide.with(this.getApplicationContext())


//.asBitmap()//强制指定加载静态图片


//.asGif()//强制指定加载动态图片


//.asFile()//强制指定文件格式的加载


.asDrawable()//强制指定 Drawable 格式的加载


.load("file:///android_asset/jdfw.gif")


.into(mImage);


  • 回调与监听


/**


  • 回调与监听


*/


SimpleTarget<Drawable> simpleTarget = new SimpleTarget<Drawable>() {


@Override


public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {


mImage.setImageDrawable(resource);


}


};


Glide.with(this.getApplicationContext())


.load(url)


.into(simpleTarget);


  • 预加载后显示


预加载


Glide.with(this)


.load("https://unsplash.it/200/200?random&22")


.preload();


预加载后显示


Glide.with(this.getApplicationContext())


.load("https://unsplash.it/200/200?random&22")


.into(mImage);


  • submit()方法:类似 Glide3 中的 downloadOnly


new Thread(new Runnable() {


@Override


public void run() {


try {


final Context context = getApplicationContext();


FutureTarget<File> target = Glide.with(context)


//.asDrawable()


.asFile()


.load(url)


.submit();


//final Drawable drawable = target.get();


final File imageFile = target.get();


runOnUiThread(new Runnable() {


@Override


public void run() {


mTextview.setText(imageFile.getPath());


}


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


});


} catch (Exception e) {


e.printStackTrace();


}


}


}).start();


  • listener()方法


Glide.with(this.getApplicationContext())


.load(url)


.listener(new RequestListener<Drawable>() {


@Override


public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {


mTextview.setText("加载失败");


return false;


}


@Override


public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {


mTextview.setText("加载成功");


return false;


}


})


.into(mImage);


  • 图片变换(圆角等)


RequestOptions options3 = new RequestOptions();


//options3.centerCrop();


// options3.fitCenter();


options3.circleCrop();


Glide.with(this.getApplicationContext())


.load("https://unsplash.it/200/200?random&55")


.apply(options3)


.into(mImage);




自定义模块




在 Glide3 中定义了自定义模块之后,还必须在 AndroidManifest.xml 文件中去注册它才能生效,而在 Glide 4 中是不需要的,因为 @GlideModule 这个注解已经能够让 Glide 识别到这个自定义模块了(记得 Build -> Rebuild Project)!


package tsou.com.simple.glide4test.glidemodule;


import android.content.Context;


import com.bumptech.glide.Glide;


import com.bumptech.glide.GlideBuilder;


import com.bumptech.glide.Registry;


import com.bumptech.glide.annotation.GlideModule;


import com.bumptech.glide.load.DecodeFormat;


import com.bumptech.glide.load.engine.cache.ExternalPreferredCacheDiskCacheFactory;


import com.bumptech.glide.module.AppGlideModule;


/**


  • Created by Administrator on 2017/12/22 0022.

  • 在 Glide3 中需要在 AndroidManifest.xml 中配置

  • <p>

  • Glide4,只要有 @GlideModule 注解就好


*/


@GlideModule


public class MyAppGlideModule extends AppGlideModule {


public static final int DISK_CACHE_SIZE = 500 * 1024 * 1024;


public static final String DISK_CACHE_NAME = "huangxiaoguo";


@Override


public void applyOptions(Context context, GlideBuilder builder) {


super.applyOptions(context, builder);


/**


将所有 Glide 加载的图片缓存到 SD 卡上,


默认硬盘缓存大小都是 250M,这里改为 500


  • */


//builder.setDiskCache(new ExternalCacheDiskCacheFactory(context));


/**


ExternalCacheDiskCacheFactory 的默认缓存路径


是在 sdcard/Android/data/包名/cache/image_manager_disk_cache 目录当中


*/


//builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, DISK_CACHE_SIZE));


/**


  • 更改缓存最总文件夹名称

  • 是在 sdcard/Android/data/包名/cache/DISK_CACHE_NAME 目录当中


*/


//此方法在 Glide4 已过时


// builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, DISK_CACHE_NAME, DISK_CACHE_SIZE));


builder.setDiskCache(new ExternalPreferredCacheDiskCacheFactory(context, DISK_CACHE_NAME, DISK_CACHE_SIZE));


/**


  • Glide 也能使用 ARGB_8888 的图片格式

  • 虽然图片质量变好了,但同时内存开销也会明显增大


*/


builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);


}


@Override


public void registerComponents(Context context, Glide glide, Registry registry) {


super.registerComponents(context, glide, registry);


}


}


  • 默认缓存路径



  • 设置缓存路径为 SD 卡



Glide3 替换成 Glide4(Generated API)




在自定义模块完成以后,就可以使用 Glide 的模式啦!请看:


//使用 Generated API(类似 Glide3 用法)


//使用 GlideApp,首先确保你的代码中有一个自定义的模块,


// 并且给它加上了 @GlideModule 注解,也就是自定义模块


GlideApp.with(this.getApplicationContext())


.load(url)


.placeholder(R.drawable.ic_launcher_background)


.error(R.mipmap.load_error)


.skipMemoryCache(true)//清除缓存


.diskCacheStrategy(DiskCacheStrategy.NONE)//表示既缓存原始图片,也缓存转换过后的图片


.override(Target.SIZE_ORIGINAL)


.circleCrop()//切圆


.into(mImage);


把之前 Glide 替换成 GlideApp,就可以使用 Glide3 的方式进行使用了!是不是很方便!


定制自己的 API




定制自己的 API 需要借助 @GlideExtension 和 @GlideOption 这两个注解。创建一个我们自定义的扩展类


package tsou.com.simple.glide4test.glidemodule;


import com.bumptech.glide.annotation.GlideExtension;


import com.bumptech.glide.annotation.GlideOption;


import com.bumptech.glide.load.engine.DiskCacheStrategy;


import com.bumptech.glide.request.RequestOptions;


import tsou.com.simple.glide4test.R;


/**


  • Created by Administrator on 2017/12/25 0025.


*/


@GlideExtension


public class MyGlideExtension {


/**


  • 将这个类的构造函数声明成 private,这是必须要求的写法


*/


private MyGlideExtension() {


}


@GlideOption


public static void myGlideConfiguration(RequestOptions options) {


//占位图


options.placeholder(R.drawable.ic_launcher_background);


//错误图片


options.error(R.mipmap.load_error);


//表示只缓存原始图片


options.diskCacheStrategy(DiskCacheStrategy.DATA);


//切圆


options.circleCrop();


//...等等所有的属性


}


}


使用自定义 API 方式


GlideApp.with(this.getApplicationContext())


.load(url)


.myGlideConfiguration()//自定义 API


.into(mImage);


这样,我们就可以直接使用自己的 API 了,同时所有的 Glide 配置都在 MyGlideExtension 进行配置,方便项目中的同意修改!


到此 Glide4 的基本使用到此结束,希望对你有所帮助!


同时欢迎大家的指教,谢谢!


Demo地址:http://download.csdn.net/download/huangxiaoguo1/10172358


Glide4 的使用方式虽然和 Glide3 不同,但是主要的功能却和 Glide3 一样,其他关于 Glide4 的功能在这里没有详细给出,需要了解,请看:

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
android图片加载库Glide4使用教程(项目中如何快速将Glide3替换成Glide4)