当前位置: 移动互联网学院 > Android开发 > Android glide框架怎么使用?
Android glide框架怎么使用? 时间:2017-04-10     来源:Android开发学习网

今天我们来讲解下android glide框架的使用,Android Glide是Android开发中常用的一种图片加载框架。在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app,今天我们就来讲解下Android Glide框架的具体用法。

1.GlideModule配置参数

package com.cary.okhttp;

import android.content.Context;

import com.bumptech.glide.Glide;

import com.bumptech.glide.GlideBuilder;

import com.bumptech.glide.load.DecodeFormat;

import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;

import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;

import com.bumptech.glide.load.engine.cache.LruResourceCache;

import com.bumptech.glide.load.engine.cache.MemorySizeCalculator;

import com.bumptech.glide.module.GlideModule;

/**

* Glide参数配置

*/

public class GlideConfig implements GlideModule {

private final int diskSize = 1024 * 1024 * 100;

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

@Override

public void applyOptions(Context context, GlideBuilder builder) {

// 定义缓存大小和位置

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

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

MemorySizeCalculator calculator = new MemorySizeCalculator(context);

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

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

builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize)); // defaultMemoryCacheSizes默认的

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) {

}

}

配置androidManifestxml

android:name="com.cary.okhttp.GlideConfig"

android:value="GlideModule"/>

配置proguard-rules.pro

-keepnames class * com.example.jianglei.glidedemo.GlideModelConfig

Glide允许一个应用当中存在多个GlideModules,但是Glide并不会按照一个特殊的顺序去调用已注册的GlideModules,如果一个应用的多个依赖工程当中有多个相同的Modules,就有可能会产生冲突。

如果一个冲突是不可避免的,应用应该默认去定义一个自己的Module,用来手动地处理这个冲突,在进行Manifest合并的时候,可以用下面的标签排除冲突的Module:

2.GlideUtils

package com.cary.okhttp;

import android.content.Context;

import android.widget.ImageView;

import com.bumptech.glide.Glide;

import com.bumptech.glide.Priority;

import com.bumptech.glide.load.engine.DiskCacheStrategy;

/**

* Created by xi on 2017/4/9.

*/

public class GlideUtil {

/**

* 异步网络图片加载

* @param context

* @param url

* @param imageView

*/

public static void loadNetImg(Context context, String url,ImageView imageView){

////inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg

Glide.with(context)

.load(url)

.into(imageView);

}

/**

* 异步网络图片加载并设置图片显示大小

* @param context

* @param url

* @param imageView

* @param width

* @param height

*/

public static void loadImgWithSize(Context context, String url,ImageView imageView, int width, int height){

Glide.with(context).load(url).override(width, height).into(imageView);

}

/**

* 异步网络加载图片,失败加载默认图片

* @param context

* @param url

* @param imageView

*/

public static void loadImgWithError(Context context, String url,ImageView imageView){

Glide.with(context)

.load(url)

.placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);

}

/**

* 网络图片加载动画

* @param context

* @param url

* @param imageView

* @param animId

*/

public static void loadImgWithAnimate(Context context, String url,ImageView imageView, int animId){

Glide.with(context).load(url).animate(animId).into(imageView);

}

/**

* 图片加载完成后回掉

*/

/**

* 支持缩略图,先加载缩略图 然后在加载全图

* @param context

* @param url

* @param imageView

*/

public static void loadGifWihtThumbnail(Context context, String url,ImageView imageView){

Glide.with(context).load(url).thumbnail(0.1f).into(imageView); //传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。

}

/**

* 显示gif静态图

* @param context

* @param url

* @param imageView

*/

public static void loadAsBitmap(Context context, String url,ImageView imageView) {

Glide.with(context).load(url).asBitmap().into(imageView);

}

/**

* 显示gif动态图

* @param context

* @param url

* @param imageView

*/

public static void loadAsGif(Context context, String url,ImageView imageView) {

Glide.with(context).load(url).asGif().into(imageView);

}

/**

* 设置磁盘缓存

* @param context

* @param url

* @param imageView

*/

public static void loadWithDiskCache(Context context, String url,ImageView imageView){

//缓存参数

//ALL:缓存源资源和转换后的资源(即所有版本,默认行为)

//NONE:不作任何磁盘缓存。然而,默认的它将仍然使用内存缓存!

//SOURCE:仅缓存源资源(原来的全分辨率的图像)。

//在我们上面略缩图的例子中,将会只有一个1000x1000 像素的图片

//RESULT:缓存转换后的资源(终的图像,即降低分辨率后的(或者是转换后的)

Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);

}

/**

* 跳过内存缓存

* @param context

* @param url

* @param imageView

*/

public static void loadWithSkipMemoryCache(Context context, String url,ImageView imageView){

//设置跳过内存缓存

//这意味着 Glide 将不会把这张图片放到内存缓存中去

//这里需要明白的是,这只是会影响内存缓存!Glide 将会仍然利用磁盘缓存来避免重复的网络请求。

Glide.with(context)

.load(url)

.skipMemoryCache(true)

.into(imageView);

}

/**

* 设置加载优先级

* @param context

* @param url

* @param imageView

*/

public static void loadByPriority(Context context, String url,ImageView imageView){

Glide.with(context).load(url).priority(Priority.NORMAL).into(imageView);

}

/**

* 清理内存缓存 可以在UI主线程中进行

* @param context

*/

public static void clearMemoryCache(Context context){

Glide.get(context).clearMemory();

}

/*

* 绑定生命周期:如果绑定对象生命周期结束,那么等待中的加载请求会被取消

* .with(Context context)// 绑定Context

.with(Activity activity);// 绑定Activity

.with(FragmentActivity activity);// 绑定FragmentActivity

.with(Fragment fragment);// 绑定Fragment

*/

}

以上就是关于android glide框架使用的内容,更多Android开发技术分享请持续关注我们。