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

解决方法:

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.

  • 在Glideandroid图片加载库Glide4使用教程(项目中如何快速将Glide3替换成Glide4)
    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);

/**

上一篇:java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password‘.


下一篇:Mac技巧29:CleanMyMac X 清理垃圾时频繁要求输入密码如何解决?