一 Glide的基本用法:
声明:本文是基于郭霖大神的CSDNAndroid图片加载框架最全解析(一),Glide的基本用法博客学习,自己总结,方便后续学习使用,原文链接戳此处郭霖大神CSDN
1.1添加依赖
目前,Glide最新的稳定版本是3.7.0;在app/build.gradle文件当中添加如下依赖
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
}
Glide中加载网络图片需要用到网络功能,因此你还得在AndroidManifest.xml中声明一下网络权限才行:
<uses-permission android:name="android.permission.INTERNET" />
二 基本使用
先看下效果图:简单的加载一张图片
2.1 xml中布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.aliang.glidedemo.MainActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="240dp"
android:src="@mipmap/ic_launcher"
android:id="@+id/image"/>
</LinearLayout>
2.2 找到控件,设置图片
ImageView img = (ImageView) findViewById(R.id.image);
Glide.with(this)
.load(R.drawable.meinv)
.into(img);
一张本地的图片已经被成功加载,并且展示到ImageView上了
分析:调用Glide.with()方法用于创建一个加载图片的实例。with()方法可以接受Context,Activity,Fragment,类型的参数。我们选择的范围非常广,不管是在Activity还是Fragment中调用with()方法,都可以直接传this。如果调用的地方既不在Activity或者Fragment,我们可以获取当前应用程序的ApplicationContext,传入到with()方法当中。
注意
with()方法中传入的实例会决定Glide加载图片的生命周期,如果传入的是Activity或者Fragment的实例,那么当这个Activity或Fragment被销毁的时候,图片加载也会停止。如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止。
看下load()这个方法:
这个方法用于指定待加载的图片资源。Glide支持加载各种各样的图片资源,包括网络图片、本地图片、应用资源、二进制流、Uri对象等等。因此load()方法也有很多个方法重载,除了我们刚才使用的加载一个字符串网址之外,你还可以这样使用load()方法:
// 加载本地图片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);
// 加载应用资源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);
// 加载二进制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);
// 加载Uri对象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);
最后看一下into()方法
这个方法就很简单了,我们希望让图片显示在哪个ImageView上,把这个ImageView的实例传进去就可以了。当然,into()方法不仅仅是只能接收ImageView类型的参数,还支持很多更丰富的用法。
Glide最基本的使用方式,其实就是关键的三步走:先with(),再load(),最后into()。
2.3 占位图
占位图就是指在图片的加载过程中,我们先显示一张临时的图片,等图片加载出来了再替换成要加载的图片。
图片Url错误时,显示占位图(只是为了显示占位图)
ImageView img = (ImageView) findViewById(R.id.img);
Glide.with(this)
.load("wwww")
.placeholder(R.drawable.test)
.into(img);
}
修改代码如下:
ImageView img = (ImageView) findViewById(R.id.img);
Glide.with(this)
.load(R.drawable.dog)
.placeholder(R.drawable.test)
.into(img);
成功后显示load加载的图片
就是这么简单。我们只是在刚才的三步走之间插入了一个placeholder()方法,然后将占位图片的资源id传入到这个方法中即可。另外,这个占位图的用法其实也演示了Glide当中绝大多数API的用法,其实就是在load()和into()方法之间串接任意想添加的功能就可以了。
当然,这只是占位图的一种,除了这种加载占位图之外,还有一种异常占位图。异常占位图就是指,如果因为某些异常情况导致图片加载失败,比如说手机网络信号不好,这个时候就显示这张异常占位图。
ImageView img = (ImageView) findViewById(R.id.img);
Glide.with(this)
.load("www")
.placeholder(R.drawable.test)
.error(R.drawable.error)
.into(img);
串接了一个error()方法就可以指定异常占位图了。
显示如下:
这样我们就把Glide提供的占位图功能都掌握了
2.4 指定图片格式
Glide另外一个强大的功能,那就是Glide是支持加载GIF图片的
Glide加载GIF图并不需要编写什么额外的代码,Glide内部会自动判断图片格式。比如这是一张GIF图片的URL地址:
http://p1.pstatp.com/large/166200019850062839d3
只需要将刚才那段加载图片代码中的URL地址替换成上面的地址就可以了,运行后结果:
也就是说,不管我们传入的是一张普通图片,还是一张GIF图片,Glide都会自动进行判断,并且可以正确地把它解析并展示出来。
指定图片的格式该怎么办呢?就比如说,我希望加载的这张图必须是一张静态图片,我不需要Glide自动帮我判断它到底是静图还是GIF图。
想实现这个功能仍然非常简单,我们只需要再串接一个新的方法就可以了,如下所示:
Glide.with(this)
.load(R.drawable.dynamic)
.asBitmap()
.into(img);
在load()方法的后面加入了一个asBitmap()方法,这个方法的意思就是说这里只允许加载静态图片,不需要Glide去帮我们自动进行图片格式的判断了。
运行程序,结果如下
调用了asBitmap()方法,现在GIF图就无法正常播放了,而是会在界面上显示第一帧的图片。
类似地,我们能强制指定加载静态图片,就也能强制指定加载动态图片。比如说我们想要实现必须加载动态图片的功能,就可以这样写:
Glide.with(this)
.load(R.drawable.dynamic)
.asGif()
.into(img)
如果指定了只能加载动态图片,而传入的图片却是一张静图的话,那么结果自然就只有加载失败.