在android中,可能需要用来从网上获取图片的需求,那么这个功能用第三方框架是最好的,因为第三方框架为我们封装了很多的操作,比如glide框架,可以异步的加载图片,并且可以设置缓存方式和缩略图等一系列功能,下边就介绍下怎么使用。
首先添加gradle:
compile ‘com.github.bumptech.glide:glide:3.7.0‘
添加对应的权限,访问网络和访问本地存储:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
最简单的使用的方法:
Glide .with(this) .load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png") .into(imageView);
glide with的介绍:
- with(Context context). 使用Application上下文,Glide请求将不受Activity/Fragment生命周期控制。
- with(Activity activity).使用Activity作为上下文,Glide的请求会受到Activity生命周期控制。
- with(FragmentActivity activity).Glide的请求会受到FragmentActivity生命周期控制。
- with(android.app.Fragment fragment).Glide的请求会受到Fragment 生命周期控制。
- with(android.support.v4.app.Fragment fragment).Glide的请求会受到Fragment生命周期控制。
设置占位图和动画
在图片过大或者网上太慢时,可以设置为图像设置一个占位图,在图像加载出来之前先显示占位图设置占位图的方式
还可以设置在图像加载失败时显示的图像
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也可以设置缩略图,即先加载缩略图,然后再加载原图:
Glide .with( context ) .load( UsageExampleGifAndVideos.gifUrl ) .thumbnail( 0.1f ) .into( imageView2 );
缓存
我们都知道图像的处理和显示在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.SOURCE) //不使用硬盘缓存 .into(image);
硬盘缓存策略
DiskCacheStrategy.NONE
: 不使用硬盘缓存
DiskCacheStrategy.SOURCE
: 将原始图像缓存在硬盘中
DiskCacheStrategy.RESULT
: 将显示出来大小的图像缓存在硬盘(默认缓存策略)
DiskCacheStrategy.ALL
: 显示的图像和原始图像都会缓存