您的位置:首页 > 移动开发 > Android开发

Android开源框架Glide的使用

2016-11-01 09:46 711 查看

Android开源框架Glide的使用



Glide
是一个快速高效的多媒体管理和图像加载的框架,封装了
Android
平台的多媒体的解码,内存和硬盘缓存等,
Glide


支持解码、显示视频、图像和GIFs,Glide是基于定制的
HttpUrlConnection
,下载使用

* jar

可以在
Github
下载最新的jar包 下载地址

* Gradle

repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}


Maven

<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>3.7.0</version>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r7</version>
</dependency>


* 混淆


-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule


加载图片

最基本的使用

image = (ImageView)findViewById(R.id.image);

Glide.with(this)

.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.into(image);


with(Context context)
:Context支持
Activity
Context
Fragment
FragmentActivity
中四种类型

load()
:支持远程图片,本地图片文件,图片资源,多媒体数据库的uri

into()
:在哪个imageview中显示

加载资源图片

Glide.with(this).load(R.drawable.ic_launcher).into(image);


加载文件图片

File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/Camera/IMG_20151025_120635_HDR.jpg");

Glide.with(this).load(f).into(image);

//or uri

Glide.with(this).load(Uri.fromFile(f)).into(image);


加载网络图片,需要设置网路权限,并联网

Glide.with(this)

.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.into(image);


设置占位图和动画

在图片过大或者网上太慢时,可以设置为图像设置一个占位图,在图像加载出来之前先显示占位图设置占位图的方式

还可以设置在图像加载失败时显示的图像

Glide.with(this).load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.placeholder(R.drawable.ic_launcher) //设置占位图,在加载之前显示

.error(R.drawable.icon) //在图像加载失败时显示

.into(image);


在加载图像时,还可以设置图像显示的动画

Glide.with(this).load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.placeholder(R.drawable.ic_launcher)

.error(R.drawable.icon)

.crossFade() //设置显示动画,

.into(image);


crossFade()
有几种重载的方法

crossFade(int duration)
:设置时间

crossFade(Animation animation, int duration)
:设置自定义的动画和时间

crossFade(int animationId, int duration)
: 加载动画资源和时间

图像剪裁和缩放

Glide
提供了
override(horizontalSize, verticalSize)
方法来裁剪图像为设置的大小,图像在裁剪之后

图像可能会变形,
Glide
还提供了两种方法
centerCrop()
fitCenter
使图像等比例的缩放和显示,可以试一下

这个两个方法的显示的不同

Glide.with(this)

.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.override(200, 240)

.centerCrop()

.into(image);


Glide.with(this)

.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.override(200, 240)

.fitCenter()

.into(image);


显示Gif和视频

Glide
中支持显示GIFs和视频,视频的加载和图像的加载基本一致,显示GIFs只需调用方法
asGif()


Glide

.with( context )

.load( gifUrl )

.asGif()

.error( R.drawable.full_cake )

.into( imageViewGif );


也可以只显示GIFs的静态图像

Glide

.with( context )

.load( gifUrl )

.asBitmap()

.into( imageViewGifAsBitmap );


缓存

我们都知道图像的处理和显示在Android中是最耗费内存的,很容易引起OOM的问题,一般在图像处理和显示时,

都会使用缓存策略,内存缓存或硬盘缓存,在
Glide
中也提供了不同的缓存策略,默认的情况下会将显示的图像

进行内存缓存,也可以设置不使用内存缓存,调用方法
skipMemoryCache(true)
,就告诉
Glide
我们不打算使用

内存缓存,默认是使用内存缓存的

Glide.with(this)

.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.skipMemoryCache(true)

.into(image);


Glide
同时也提供了硬盘缓存,硬盘缓存的策略可以通过方法
diskCacheStrategy()
来设定

Glide.with(this)

.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.diskCacheStrategy(DiskCacheStrategy.NONE) //不使用硬盘缓存

.into(image);


硬盘缓存策略

DiskCacheStrategy.NONE
: 不使用硬盘缓存

DiskCacheStrategy.SOURCE
: 将原始图像缓存在硬盘中

DiskCacheStrategy.RESULT
: 将显示出来大小的图像缓存在硬盘(默认缓存策略)

DiskCacheStrategy.ALL
: 显示的图像和原始图像都会缓存

请求优先级

Glide
中可以设置图像加载的优先级,这个优先级的策略并不是严格执行的,只是一个指导策略,从低到高的

优先级,可以为不同的图像设置不同的优先级,看一下加载的效果

Priority.LOW

Priority.NORMAL

Priority.HIGH

Priority.IMMEDIATE


Glide.with(this)

.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")

.priority(Priority.HIGH)

.into(image);


自定义转换和动画

Glide
提供了方法可以使开发者自定义转换(圆角图像、图像模糊等)和动画

后续会有demo实例,To be continue….
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息