第三方图片加载框架Glide的使用方法(在ImageView中加载jif动画)

509 阅读3分钟

概述

Glide是一款第三方开源的图片加载框架,其作者是Google的一名员工,也是Google官方推荐的图片加载库。Glide与Picasso非常相似,拥有非常简洁、灵活的API,并且支持加载Gif图片。它出现的目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。
GitHup地址:github.com/bumptech/gl…
》####我们可以更加高效的使用Glide提供的方式进行绑定,这样可以更好的让加载图片的请求的生命周期动态管理起来:
Glide可以绑定:context,acvitity,fragmentacvitity,fragment

在线添加依赖包,配置网络权限:

compile 'com.github.bumptech.glide:glide:3.7.0'
manifest中配置网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Mainacvitity.java

/**
 Glide.with(可以是context,acvitity,fragmentacvitity,fragment)
*/
 Glide.with(this).load(R.drawable.kenan)
                .asGif()
                .error(R.mipmap.ic_launcher)
                .placeholder(R.mipmap.loading)
                .override(600,400)
                 .into(iv);

加载静态图片和本地视频:

1) 如果使用的是ListView,可以直接在Adapter的getView方法中使用:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
//…..
}
Glide
.with(context)
.load(imageUrls[position])
.into(holder.imageView);
return convertView;
}

2)    如果使用的是RecyclerView,可以在Adapter的onBindViewHolder方法中使用:

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {

        Glide.with(MainActivity.this)
                .load(args[position])
                .into(holder.imageView);
    }


 3)    当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片,通过placeHolder()方法: 

Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.placeholder(R.mipmap.ic_launcher) // can also be a drawable
.into(imageViewPlaceholder);

4)    当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示:

Glide
.with(context)
.load(“futurestud.io/non_existin…“)
.error(R.mipmap.future_studio_launcher) // will be displayed if the image cannot be loaded
.into(imageViewError);

5)    图片的缩放,centerCrop()和fitCenter():        

//使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的
//Height是match_parent则图片就会被拉伸填充
Glide.with(MainActivity.this)
.load(args[position])
.centerCrop()
.into(holder.imageView);

//使用fitCenter即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围
//该图像将会完全显示,但可能不会填满整个 ImageView。
Glide.with(MainActivity.this)
.load(args[position])
.fitCenter()
.into(holder.imageView);

6)    显示gif动画:

Glide
.with( context )
.load( gifUrl )
.asGif() //判断加载的url资源是否为gif格式的资源
.error( R.drawable.full_cake )
.into( imageViewGif );

7)    显示本地视频

String filePath = “/storage/emulated/0/Pictures/example_video.mp4”;
Glide
.with( context )
.load( Uri.fromFile( new File( filePath ) ) )
.into( imageViewGifAsBitmap );

8)    缓存策略:

Glide
.with( context )
.load( Images[0] )
.skipMemoryCache( true ) //跳过内存缓存
.into( imageViewInternet );

Glide
.with( context )
.load( images[0] )
.diskCacheStrategy( DiskCacheStrategy.NONE ) //跳过硬盘缓存
.into( imageViewInternet );

DiskCacheStrategy.NONE 什么都不缓存
DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像
DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)
DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为)

9)    优先级,设置图片加载的顺序:

Priority.LOW
Priority.NORMAL
Priority.HIGH
Priority.IMMEDIATE

private void loadImageWithHighPriority() {
Glide
.with( context )
.load( mages[0] )
.priority( Priority.HIGH )
.into( imageViewHero );
}
private void loadImagesWithLowPriority() {
Glide
.with( context )
.load( images[1] )
.priority( Priority.LOW )
.into( imageViewLowPrioLeft );
Glide
.with( context )
.load( images[2] )
.priority( Priority.LOW )
.into( imageViewLowPrioRight );
}

10)    当不需要将加载的资源直接放入到ImageView中而是想获取资源的Bitmap对象:

//括号中的300,600代表宽和高但是未有作用
SimpleTarget target = new SimpleTarget(300,600) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation