Glide
Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。
Glide从4.0版本以后,使用的是kotlin语言来开发的,但是我对kotlin使用不是很熟悉,同时参考郭霖的Glide的源码分析的博客,所以这里也用3.7.0版本。
Glide的基本使用
引入Glide
使用Glide,首先要把这个库引入到我们的项目中。在app/build.gradle文件中添加如下依赖:
dependencies {
implementation 'com.github.bumptech.glide:glide:3.7.0'
}
另外,如果要使用网络图片,还需要在AndroidManifest.xml文件中声明网络权限,如下:
<uses-permission android:name="android.permission.INTERNET"/>
注意:在Android 9.0及以上版本,不允许使用http请求,我们可以在AndroidManifest.xml文件中的application标签中,添加android:usesCleartextTraffic="true"这个属性,就可以使用http请求了。
<application
android:usesCleartextTraffic="true"
>
在这里讲解下android:usesCleartextTraffic="true"属性,这个属性是设置应用程序是否使用明文网络流量的,比如说http请求。目标API级别为27及以下的应用程序默认值是true,在API级别是28及以上的时候默认值为false。
加载图片
我们在布局xml文件中添加一个ImageView的控件,来显示图片。接下来,用一行代码就可以来从网络下载图片并进行显示了。
String url = "http://dmimg.5054399.com/allimg/pkm/pk/13.jpg";
Glide.with(this).load(url).into(mImageView1);
在上面代码中,使用Glide.with()方法创建一个加载图片的实例。with()方法可以接收Context、Activity、Fragment类型的参数。也就是说不管是在Activity还是在Fragment中调用with()方法,都可以直接传this。如果调用的地方不在这两个里面,就可以通过获取应用程序的ApplicationContext,传入到with()方法中。这里要注意的是传入的实例会决定Glide加载图片的生命周期。如果传入的是Activity或者Fragment的实例,那么当Activity或者Fragment被销毁的时候,图片加载也会停止。如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止。
with()方法的五种重载:
public static RequestManager with(Context context) {}
public static RequestManager with(Activity activity) {}
public static RequestManager with(FragmentActivity activity) {}
public static RequestManager with(android.app.Fragment fragment) {}
public static RequestManager with(android.support.v4.app.Fragment fragment) {}
load()这个方法用于指定待加载的图片资源。Glide支持加载多种图片资源,包括网络图片、本地图片、应用资源、二进制流、Uri对象等。因此,load()方法也有很多个方法重载,除了我们上面我们使用的加载网络图片资源之外,还有如下使用的方式:
//加载本地图片;
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(mImageView);
//加载应用资源;
int resource = R.mipmap.image;
Glide.with(this).load(resource).into(mImageView);
//加载二进制流;
byte[] image = getImageBytes();
Glide.with(this).load(image).into(mImageView);
//加载Uri对象;
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(mImageView);
load()方法有如下的几种重载:
public DrawableTypeRequest<byte[]> load(byte[] model) {}
public DrawableTypeRequest<File> load(File file) {}
public DrawableTypeRequest<Integer> load(Integer resourceId) {}
public DrawableTypeRequest<String> load(String string) {}
public <T> DrawableTypeRequest<T> load(T model) {}
public DrawableTypeRequest<Uri> load(Uri uri) {}
into()方法比较简单,当我们希望让图片显示在哪个ImageView时,就把那个ImageView的实例作为参数传进去就可以了。虽然前面的load()方法返回的对象是DrawableTypeRequest,但是在DrawableTypeRequest类中并没有重写into()方法,所以使用的是父类DrawableRequestBuilder中的into()方法。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-----------------last line for now-------------------