成都android培训
达内成都高升桥中心

18684047202

热门课程

成都Android培训:Glide的功能和使用

  • 时间:2017-09-04
  • 发布:成都达内
  • 来源:成都达内

成都Android培训:Glide的功能和使用

在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年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,减小系统回收压力

功能

1)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生命周期控制。

2)load()使用

Glide基本可以load任何可以拿到的媒体资源

SD卡资源:load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/test.jpg")

assets资源:load("file:///android_asset/f003.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.frank.glide/drawable/news")或load("android.resource://com.frank.glide/drawable/"+R.drawable.news)

ContentProvider资源:load("content://media/external/images/media/139469")

http资源:load("http://img.my.csdn.NET/uploads/201508/05/1438760757_3588.jpg")

https资源:load("https://img.alicdn.com/tps/TB1uyhoMpXXXXcLXVXXXXXXXXXX-476-538.jpg_240x5000q50.jpg_.webp")

注意:

load不限于String类型

还可以是:load(Uri uri),load(File file),load(Integer resourceId),load(URL url),load(byte[] model),load(T model),loadFromMediaStore(Uri uri)。

3)重要功能:

(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("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")

.thumbnail(0.1f)

.into(iv_0);

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

DrawableRequestBuilder thumbnailRequest = Glide

.with(this)

.load(R.drawable.news);

Glide.with(this)

.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")

.thumbnail(thumbnailRequest)

.into(iv_0);

(8)对图片进行裁剪、模糊、滤镜等处理:

//圆形裁剪

Glide.with(this)

.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")

.bitmapTransform(new CropCircleTransformation(this))

.into(iv_0);

//圆角处理

Glide.with(this)

.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")

.bitmapTransform(new RoundedCornersTransformation(this,30,0, RoundedCornersTransformation.CornerType.ALL))

.into(iv_0);

//灰度处理

Glide.with(this)

.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")

.bitmapTransform(new GrayscaleTransformation(this))

.into(iv_0);

//其它变换...

(9)对请求状态进行监听:

(10)对资源的下载进度进行监听:

4)API方法说明

(1)thumbnail(float sizeMultiplier).

请求给定系数的缩略图。如果缩略图比全尺寸图先加载完,就显示缩略图,否则就不显示。系数sizeMultiplier必须在(0,1)之间,可以递归调用该方法。

(2)sizeMultiplier(float sizeMultiplier).

在加载资源之前给Target大小设置系数。

(3)diskCacheStrategy(DiskCacheStrategy strategy).

设置缓存策略。DiskCacheStrategy.SOURCE:缓存原始数据,DiskCacheStrategy.RESULT:缓存变换(如缩放、裁剪等)后的资源数据,DiskCacheStrategy.NONE:什么都不缓存,DiskCacheStrategy.ALL:缓存SOURC和RESULT。默认采用DiskCacheStrategy.RESULT策略,对于download only操作要使用DiskCacheStrategy.SOURCE。

(4)priority(Priority priority).

指定加载的优先级,优先级越高越优先加载,但不保证所有图片都按序加载。枚举Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW。默认为Priority.NORMAL。

(5)dontAnimate().

移除所有的动画。

(6)animate(int animationId).

在异步加载资源完成时会执行该动画。

(7)animate(ViewPropertyAnimation.Animator animator).

在异步加载资源完成时会执行该动画。

(8)placeholder(int resourceId).

设置资源加载过程中的占位Drawable。

(9)placeholder(Drawable drawable).

设置资源加载过程中的占位Drawable。

(10)fallback(int resourceId).

设置model为空时要显示的Drawable。如果没设置fallback,model为空时将显示error的Drawable,如果error的Drawable也没设置,就显示placeholder的Drawable。

(11)fallback(Drawable drawable).

设置model为空时显示的Drawable。

(12)error(int resourceId).

设置load失败时显示的Drawable。

(13)error(Drawable drawable).

设置load失败时显示的Drawable。

(14)listener(RequestListener requestListener).

监听资源加载的请求状态,可以使用两个回调:onResourceReady(R resource, T model, Target target, boolean isFromMemoryCache, boolean isFirstResource)和onException(Exception e, T model, Target target, boolean isFirstResource),但不要每次请求都使用新的监听器,要避免不必要的内存申请,可以使用单例进行统一的异常监听和处理。

(15)skipMemoryCache(boolean skip).

设置是否跳过内存缓存,但不保证一定不被缓存(比如请求已经在加载资源且没设置跳过内存缓存,这个资源就会被缓存在内存中)。

(16)override(int width, int height).

重新设置Target的宽高值(单位为pixel)。

(17)into(Y target).

设置资源将被加载到的Target。

(18)into(ImageView view).

设置资源将被加载到的ImageView。取消该ImageView之前所有的加载并释放资源。

(19)into(int width, int height).

后台线程加载时要加载资源的宽高值(单位为pixel)。

(20)preload(int width, int height).

预加载resource到缓存中(单位为pixel)。

(21)asBitmap().

无论资源是不是gif动画,都作为Bitmap对待。如果是gif动画会停在第一帧。

(22)asGif().

把资源作为GifDrawable对待。如果资源不是gif动画将会失败,会回调.error()。

成都android培训成都android培训班成都android培训机构

上一篇:android教程 :Glide的使用步骤
下一篇:Android程序:ImageLoader

Android切面编程Aspectj

Android 开发不可错过的开源项目

Android应用程序日志真的泄漏敏感信息了吗?

如何用Android Studio做一个简单的Android App

选择城市和中心
贵州省

广西省

海南省