入行学习Android这门技术已经快一年了,自己也一直在培养写博客的习惯,每次通过自己的学习探索到新的知识领域,同时分享给大家都非常高兴。
最近公司一直在做图片的加载的相关的东西,看了一遍郭霖大神的Glide的讲解,在这里自己做一下总结。
Glide基础的学习
Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。
目前,Glide最新的稳定版本是3.7.0,虽然4.0已经推出RC版了,但是暂时问题还比较多。因此,我们这个系列的博客都会使用Glide 3.7.0版本来进行讲解,这个版本的Glide相当成熟和稳定。
在项目中使用Glide首先要添加依赖。
compile 'com.github.bumptech.glide:glide:3.7.0'
加载图片少不了网络,因此接下来就是添加网络权限。
<uses-permission android:name="android.permission.INTERNET"/>
接下来你就可以来感受Glide的强大的图片加载功能了。
加载静态的图片
首先你要有一个带加载的图片的url地址。
String url = "http://guolin.tech/test.gif";
接下来在布局中下一个包含按钮和图片加载控件的xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Load Image"
android:onClick="loadImage"
/>
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
接下来就是去activity中实现加载图片的代码的任务了
Glide.with(this)
.load(url)
.into(ImageView)
没错就是这么简单一行代码加载OnCreate()中就将刚刚地址的图片加载出来了不过这了只是简单的加载,后续还可以添加好多功能。
接下来看一下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);
刚刚我们学习的是glide的最核心的东西我们可以在这个基础上扩展好多东西接下来听小黑慢慢墨迹。
- 占位图:就是在图片下载的时候使用一张默认的图片代替加载的图片的位置,改善用户的体验。
.placeholder(R.drawable.loading)
在加载的url和显示的控件之间使用placeholder(resourceId)指定占位图。
- 指定加载异常的图片:就是在加载图片的时候出错的时候显示的图片。
.error(R.drawable.error)
添加的位置和placeholder的位置是相同的
- Glide还有一个强大的功能就是加载动态图,我们把原来的加载的资源的地址修改为一个动态图的地址就可以实现加载动态图,我们还可以通过asBitmap()将动态图加载为静态图片。
- 指定图片的大小
.override(100, 100)
在图片加载到控件之前调用这个方法修改图片的大小。