600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android glide图片框架 【Android 进阶】图片载入框架之Glide(示例代码)

android glide图片框架 【Android 进阶】图片载入框架之Glide(示例代码)

时间:2019-12-29 23:58:00

相关推荐

android glide图片框架 【Android 进阶】图片载入框架之Glide(示例代码)

简单介绍

在泰国举行的谷歌开发人员论坛上,谷歌为我们介绍了一个名叫 Glide 的图片载入库,作者是 bumptech。这个库被广泛的运用在 google 的开源项目中,包含 年 google I/O 大会上公布的官方 app。

特点

(1)使用简单

(2)可配置度高,自适应程度高

(3)支持常见图片格式 : Jpg png gif webp

(4)支持多种数据源: 网络、本地、资源、Assets 等

(5)高效缓存策略: 支持 Memory 和 Disk 图片缓存,默认 Bitmap 格式採用 RGB_565, 内存使用至少降低一半.

(6)生命周期集成: 依据 Activity/Fragment 生命周期自己主动管理请求

(7)高效处理 Bitmap : 使用Bitmap Pool 使 Bitmap 复用,主动调用 recycle 回收须要回收的 Bitmap,减小系统回收压力.

功能API介绍:

1)简单使用:

Glide

.with(this)

.load("/source/a.png")

.into(imageView);

2)Glide.with() 的使用

(1)with(Context context). 使用 Application 上下文,Glide 请求将不受 Activity/Fragment 生命周期控制。

(2)with(Activity activity).使用 Activity 作为上下文。Glide 的请求会受到 Activity 生命周期控制。

(3)with(FragmentActivity activity).Glide 的请求会受到FragmentActivity 生命周期控制。

(4)with(android.app.Fragment fragment).Glide 的请求会受到Fragment 生命周期控制。

(5)with(android.support.v4.app.Fragment fragment).Glide 的请求会受到 Fragment 生命周期控制。

3)load() 的使用

Glide 基本能够 load 不论什么能够拿到的媒体资源

SD 卡资源:

load(“file://”+ Environment.getExternalStorageDirectory().getPath()+”/test.jpg”)

assets 资源:

load(“file:///android_asset/3.gif”)

raw 资源:

load(“Android.resource://com.frank.glide/raw/raw_1”) 或load(“android.resource://com.frank.glide/raw/”+R.raw.raw_1)

drawable 资源:

load(“android.resource://com.veyron.glide/drawable/news”)或load(“android.resource://comveyron.glide/drawable/”+R.drawable.news)

ContentProvider 资源:

load(“content://media/external/images/media/139469”)

此外,load 不限于 string 类型:

load(Uri uri),load(File file),load(Integer resourceId),load(URL url)。load(byte[] model),load(T model),loadFromMediaStore(Uri uri)。

4)重要功能

(1)禁止内存缓存: .skipMemoryCache(true)

(2)清除内存缓存: // 必须在UI线程中调用

Glide.get(context).clearMemory();

(3)禁止磁盘缓存: .diskCacheStrategy(DiskCacheStrategy.NONE)

(4)清除磁盘缓存: // 必须在后台线程中调用。建议同一时候clearMemory()

Glide.get(applicationContext).clearDiskCache();

(5)获取缓存大小: new GetDiskCacheSizeTask(textView).execute(new File(getCacheDir(), DiskCache.Factory.DEFAULT_DISK_CACHE_DIR));

class GetDiskCacheSizeTask extends AsyncTask {

private final TextView resultView;

public GetDiskCacheSizeTask(TextView resultView) {

this.resultView = resultView;

}

@Override

protected void onPreExecute() {

resultView.setText("Calculating...");

}

@Override

protected void onProgressUpdate(Long... values) { /* onPostExecute(values[values.length - 1]); */ }

@Override

protected Long doInBackground(File... dirs) {

try {

long totalSize = 0;

for (File dir : dirs) {

publishProgress(totalSize);

totalSize += calculateSize(dir);

}

return totalSize;

} catch (RuntimeException ex) {

final String message = String.format("Cannot get size of %s: %s", Arrays.toString(dirs), ex);

new Handler(Looper.getMainLooper()).post(new Runnable() {

@Override

public void run() {

resultView.setText("error");

Toast.makeText(resultView.getContext(), message, Toast.LENGTH_LONG).show();

}

});

}

return 0L;

}

@Override

protected void onPostExecute(Long size) {

String sizeText = android.text.format.Formatter.formatFileSize(resultView.getContext(), size);

resultView.setText(sizeText);

}

private static long calculateSize(File dir) {

if (dir == null) return 0;

if (!dir.isDirectory()) return dir.length();

long result = 0;

File[] children = dir.listFiles();

if (children != null)

for (File child : children)

result += calculateSize(child);

return result;

}

}

(6)指定资源的优先载入顺序:

//优先载入

Glide

.with(context)

.load(heroImageUrl)

.priority(Priority.HIGH)

.into(imageViewHero);

//后载入

Glide

.with(context)

.load(itemImageUrl)

.priority(Priority.LOW)

.into(imageViewItem);

(7)先显示缩略图,再显示原图:

//用原图的1/10作为缩略图

Glide

.with(this)

.load("/uploads/source/nestedfragment/fragments.png")

.thumbnail(0.1f)

.into(iv_0);

//用其他图片作为缩略图

DrawableRequestBuilder thumbnailRequest = Glide

.with(this)

.load(R.drawable.news);

Glide.with(this)

.load("/uploads/source/nestedfragment/fragments.png")

.thumbnail(thumbnailRequest)

.into(iv_0);

(8)对图片进行裁剪、模糊、滤镜等处理:详细看demo源代码

5)部分api介绍:

补充:

CenterCrop

CenterCrop() 是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内而且裁剪额外的部分。ImageView 可能会全然填充,但图像可能不会完整显示。

FitCenter

fitCenter() 也是裁剪技术,即缩放图像让图像都測量出来等于或小于 ImageView 的边界范围。该图像将会全然显示,但可能不会填满整个 ImageView。

使用步骤:

1)在 build.gradle 中加入依赖:

compile ‘com.github.bumptech.glide:glide:3.7.0‘

2)假设你的项目没有 support-v4 库,还须要加入 support-v4 依赖:

compile ‘com.android.support:support-v4:23.3.0‘

3)假设使用变换。能够加入一个自己定义的变换库

加入依赖:

compile ‘jp.wasabeef:glide-transformations:2.0.1‘

// If you want to use the GPU Filters

compile ‘jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0‘

Demo

后话

欢迎关注我的微信公众号

不仅仅是原创技术文章,很多其他的是对生活的思考总结

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。