解决方法:
Glide4.4.0引入的是27.0.2版本,所以把你项目中的appcompat-v7更换为:
implementation ‘com.android.support:appcompat-v7:27.0.2’
详细请看:Glide4.4.0报java.lang.NoSuchMethodError
- 普通加载图片
Glide.with(this.getApplicationContext())
.load(url)
.into(mImage);
- 占位图和错误时显示图片
RequestOptions options = new RequestOptions();
options.placeholder(R.drawable.ic_launcher_background);
options.error(R.mipmap.load_error);
//禁用掉Glide的缓存功能
options.diskCacheStrategy(DiskCacheStrategy.NONE);
Glide.with(this.getApplicationContext())
.load(url)
.apply(options)
.into(mImage);
这里就是Glide4和Glide3的最大不同,他将部分API功能封装在RequestOptions 中,在通过apply方法,传递给Glide使用,这样我们就可以很方便的在需要的地方可以进行不同的配置了,不用像Glide3一样传递很多参数!
- 指定图片大小
RequestOptions options1 = new RequestOptions();
//指定大小为200*100
//options1.override(200, 100);
//加载一张图片的原始尺寸的图片
options1.override(Target.SIZE_ORIGINAL);
Glide.with(this.getApplicationContext())
.load(url)
//请求给定系数的缩略图。如果缩略图比全尺寸图先加载完,
// 就显示缩略图,否则就不显示。
// 系数sizeMultiplier必须在(0,1)之间,
// 可以递归调用该方法。
.thumbnail(0.1f)
.apply(options1)
.into(mImage);
- 禁用内存缓存&硬盘缓存功能
// DiskCacheStrategy.NONE: 表示不缓存任何内容。
// DiskCacheStrategy.DATA: 表示只缓存原始图片。
// DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
// DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
// DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
RequestOptions options2 = new RequestOptions()
//禁用内存缓存
.skipMemoryCache(true)
//硬盘缓存功能
.diskCacheStrategy(DiskCacheStrategy.NONE);
Glide.with(this.getApplicationContext())
.load(url)
.apply(options2)
.into(mImage);
- 指定加载格式GIF
Glide.with(this.getApplicationContext())
.load(“file:///android_asset/jdfw.gif”)
.into(mImage);
- 获取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 simpleTarget = new SimpleTarget() {
@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 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());
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
- listener()方法
Glide.with(this.getApplicationContext())
.load(url)
.listener(new RequestListener() {
@Override
public boolean onl oadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
mTextview.setText(“加载失败”);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target 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.
-
在Glide
3中需要在AndroidManifest.xml中配置 -
-
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[外链图片转存中…(img-hp0FWF5y-1643606661073)]
3中需要在AndroidManifest.xml中配置 -
-
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);
/**