当前位置: 首页 > 工具软件 > glide-docs-cn > 使用案例 >

android glide支持的格式,Glide-Android最常用的图片加载框架

游高杰
2023-12-01

一、概述

Glide目前在Android的开发中非常的受欢迎,几乎是随便开一个项目都会想到使用glide当图片加载框架。有兴趣可以阅读下Glide源码。在附上Glide官方使用文档: https://muyangmin.github.io/glide-docs-cn/doc/options.html

1.主要特点

(1)支持Memory和Disk图片缓存。

(2)支持gif和webp格式图片。

(3)根据Activity/Fragment生命周期自动管理请求。

(4)使用Bitmap Pool可以使Bitmap复用。

(5)对于回收的Bitmap会主动调用recycle,减小系统回收压力。

二、引用

1.高版本

implementation 'com.github.bumptech.glide:glide:4.11.0'

annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'

2.低版本

implementation 'com.github.bumptech.glide:glide:3.7.0'

三、使用

1.简单使用

Glide

.with(context)

.load(url)

.centerCrop()

.placeholder(R.drawable.loading_spinner)

.into(myImageView);

2.加载bitmap

Glide.with(this).load(path).asBitmap().into(new SimpleTarget() {

@Override

public void onResourceReady(Bitmap resource, GlideAnimation super Bitmap> glideAnimation) {

ivPic.setImageBitmap(resource);

}

});

3.加载Drawable

Glide.with(this).load(path).into(new Target(){

@Override

public void onStart() {

}

@Override

public void onStop() {

}

@Override

public void onDestroy() {

}

@Override

public void onLoadStarted(Drawable placeholder) {

}

@Override

public void onLoadFailed(Exception e, Drawable errorDrawable) {

}

@Override

public void onResourceReady(GlideDrawable resource, GlideAnimation super GlideDrawable> glideAnimation) {

//Drawable进行转换

}

@Override

public void onLoadCleared(Drawable placeholder) {

}

@Override

public void getSize(SizeReadyCallback cb) {

}

@Override

public void setRequest(Request request) {

}

@Override

public Request getRequest() {

return null;

}

});

4.Glide配置(这个配置要生效的话,不通版本的配置不一样,有的是加注解,有的需要在清单文件里面配置)

public class GlideModelConfig implements GlideModule {

int diskSize = 1024 * 1024 * 100;

int memorySize = (int) (Runtime.getRuntime().maxMemory()) / 8; // 取1/8最大内存作为最大缓存

@Override

public void applyOptions(Context context, GlideBuilder builder) {

// 定义缓存大小和位置

builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskSize)); //内存中

builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "cache", diskSize)); //sd卡中

// 默认内存和图片池大小

MemorySizeCalculator calculator = new MemorySizeCalculator(context);

int defaultMemoryCacheSize = calculator.getMemoryCacheSize(); // 默认内存大小

int defaultBitmapPoolSize = calculator.getBitmapPoolSize(); // 默认图片池大小

builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize)); // 该两句无需设置,是默认的

builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize));

// 自定义内存和图片池大小

builder.setMemoryCache(new LruResourceCache(memorySize));

builder.setBitmapPool(new LruBitmapPool(memorySize));

// 定义图片格式

builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);

builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565); // 默认

}

@Override

public void registerComponents(Context context, Glide glide) {

}

}

四、源码分析

网络下载图片:HttpUrlFetcher

加载asset:AssetPathFetcher

Glide是个单例,使用双重校验(com.bumptech.glide.Glide)。

/**

* Get the singleton.

*

* @return the singleton

*/

public static Glide get(Context context) {

if (glide == null) {

synchronized (Glide.class) {

if (glide == null) {

Context applicationContext = context.getApplicationContext();

List modules = new ManifestParser(applicationContext).parse();

GlideBuilder builder = new GlideBuilder(applicationContext);

for (GlideModule module : modules) {

module.applyOptions(applicationContext, builder);

}

glide = builder.createGlide();

for (GlideModule module : modules) {

module.registerComponents(applicationContext, glide);

}

}

}

}

return glide;

}

 类似资料: