git地址https://github.com/bumptech/glide
相关地址
https://www.jianshu.com/p/2942a57401eb#comment-22582650
https://blog.csdn.net/column/details/15318.html
https://blog.csdn.net/hexingen/article/details/72970807
https://blog.csdn.net/hexingen/article/details/76422241
使用,app下的build.gradle里添加库
implementation 'com.github.bumptech.glide:glide:4.6.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
另外添加一个internet权限,就可以用拉
GlideApp.with(this).load("http://goo.gl/gEgYUd").into(imageView);
最简单的就是上边的用法了。with后边可以是fragment,activity,view,context之类的。
不过如果你是用kotlin写的,运行的时候会失败的,如下GildeApp不识别
Unresolved reference: GlideApp
但是你用下边的写法,在kotlin中是没问题的
Glide.with(iv).load(url) .into(iv)
如果你想对glide的一些默认配置做整体修改咋办,增加如下的类。这个类的配置可以参考上边的文章
注意以下,用java写,别用kotlin,要不GlideApp可能不识别
import android.content.Context;
import android.os.Environment;
import android.support.annotation.NonNull;
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.engine.bitmap_recycle.LruBitmapPool;
import com.bumptech.glide.load.engine.cache.DiskLruCacheFactory;
import com.bumptech.glide.load.engine.cache.ExternalCacheDiskCacheFactory;
import com.bumptech.glide.load.engine.cache.LruResourceCache;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.module.AppGlideModule;
import java.io.File;
import java.io.InputStream;
/**
* Created by charlie.song on 2018/4/8.
* 加上@GlideModule注解以便Glide识别
*/
@GlideModule
public class MyGlideConfig extends AppGlideModule {
int diskCacheSize=500*1024*1024;
private File diskCacheFolder=new File(Environment.getExternalStorageDirectory(),"demo0327");
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
//磁盘缓存配置(默认缓存大小250M,默认保存在内部存储中)
//设置磁盘缓存保存在外部存储,且指定缓存大小
// builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, diskCacheSize));
//设置磁盘缓存保存在自己指定的目录下,且指定缓存大小
builder.setDiskCache(new DiskLruCacheFactory(new DiskLruCacheFactory.CacheDirectoryGetter() {
@Override
public File getCacheDirectory() {
return diskCacheFolder;
}
}, diskCacheSize));
System.out.println("=====================apply options");
//内存缓存配置(不建议配置,Glide会自动根据手机配置进行分配)
//设置内存缓存大小
// builder.setMemoryCache(new LruResourceCache(memoryCacheSize));
//设置Bitmap池大小
// builder.setBitmapPool(new LruBitmapPool(bitmapPoolSize));
}
@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
super.registerComponents(context, glide, registry);
//替换组件,如下替换网络请求库
// registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory());
}
}
以前这个配置文件是在manifest里注册的,现在是通过添加@GlideModule这个注解来注册的,省事
下边继续说碰到的问题。如果直接在kotlin代码里使用GlideApp会出错的。那咋办,如下,写个java文件使用GildeApp,然后kotlin代码里调用这个java代码里的方法就没问题了。
public class UtilNormal {
public static void loadCircle(Context context,String url, ImageView iv){
GlideApp.with(context).load(url).circleCrop().placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher_round).into(iv);
}
}
另外,比如上边的我们添加了配置文件,我修改了Glide默认缓存的图片路径在sdcard上,读写文件是需要权限的。
来处理下动态权限,如下在activity里添加如下的代码,嗯,放在加载图片之前额,要不的话你这边权限还没申请,那边配置文件已经执行了。那就得杀死程序下次进来才有效果拉。
fun requestExternalStorage() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE), 1)
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 1) {
for (i in permissions.indices) {
if (grantResults[i] == PERMISSION_GRANTED) {
Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show()
}
}
}
}
最新的解决办法,kotlin中使用GlideApp的办法
在app的build.gradle下添加下边 的代码就可以了,不需要在写java文件了。
apply plugin: 'kotlin-kapt'//kapt3插件
implementation 'com.github.bumptech.glide:glide:4.6.1'
kapt 'com.github.bumptech.glide:compiler:4.6.1' //annotationProcessor 改成kapt,别忘了上边那个kotlin-kapt插件。
动态权限平时都不用,都是偷懒把targetSDK改成21。待会去看下动态权限,记得有不少封装好的库
后记
今天无聊把文件移动了下位置,发现这玩意又挂了,一直提示GlideApp找不到。坑爹。我以为是我新加的库冲突了,删了还是不行,后来点到我使用这个东西的地方,看到灰色的代码
import com.charliesong.demo0327.GlideApp;
为啥根目录下应该有个这个?奇怪,我想了想我都干啥了,我就是把根目录下的一堆文件都拉到一个新的文件夹下了。。
想了想,我就把和glide相关的文件拉出来继续放到根目录下,结果没事了。
@GlideModule
public class MyGlideConfig extends AppGlideModule {
上边说了一堆都是假象,真正的原因在下边
![](https://img.haomeiwen.com/i4625080/2ebd628460111bf1.png)
先说下GlideApp使用的条件,参考上边的代码
随便自定义一个类extends AppGlideModule
为这个类加入注解@GlideModule
然后需要点击studio上方的工具栏Build,然后选择第一个Make Project【这个是重点,如果你以后移动了这个文件的位置,那么就得删除上边的import的东西,然后重新点击Make Project生成GlideApp】
分析原因
就因为生成的GlideApp的位置和继承AppGlideModule这玩意的子类是同一package,所以你如果移动了这个继承AppGlideModule的子类,那么老的GlideApp的位置就不对了,就得重新make生成了。
网友评论