首先在bulid.gradle添加
implementation 'com.github.bumptech.glide:glide:4.8.0'
然后gradle.properties添加
android.useAndroidX=true android.enableJetifier=true
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
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="match_parent"
android:layout_height="wrap_content"
android:text="加载图片"
android:onClick="onLoadImageClick"
/>
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
主代码
package com.example.loadimagedemo;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;
import android.view.*;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private ImageView mIv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mIv = findViewById(R.id.iv);
}
public void onLoadImageClick(View v){
String path = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F201807%2F04%2F20180704190435_TdNuf.thumb.400_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1629904653&t=2d93ff5924417dc6081cca4abe59e976";
// loadUrlmage(path);
// gildeLoadImage(path);
glideAppLoadUrlImage(path);
}
/**
* 加载网络图片
* @param img 网络图片的地址
*/
private void loadUrlmage(final String img){
mIv.setImageResource(R.drawable.comment);
/**
* 1、找到图片地址
* 2、根据图片的地址,把图片转化为可被加载的对象
* 3、通过imageView来把对象展现出来
*/
new Thread(){
@Override
public void run() {
super.run();
Message message = new Message();
try {
URL url = new URL(img);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
int code = httpURLConnection.getResponseCode();
//请求成功
if(code == 200){
//获取数据流
InputStream inputStream = httpURLConnection.getInputStream();
//可被imageView加载的对象
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
message.obj = bitmap;
message.what = 200;
}else{
message.what = code;
}
}catch (MalformedURLException e){
e.printStackTrace();
message.what = -1;
}catch (IOException e){
e.printStackTrace();
message.what = -1;
}finally {
handler.sendMessage(message);
}
}
}.start();
}
private Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 200:
//获取bitmap
Bitmap bitmap = (Bitmap) msg.obj;
mIv.setImageBitmap(bitmap);
break;
default:
mIv.setImageResource(R.mipmap.ic_launcher);
break;
}
}
};
/**
* 通过Glide加载网络图片
* @param img
*/
private void gildeLoadImage(String img){
//配置Glide
RequestOptions options = new RequestOptions()
.placeholder(R.mipmap.ic_launcher)//加载过程中的图片
.error(R.mipmap.ic_launcher)//加载失败时的图片
.circleCrop();
Glide.with(this)
.load(img)
.apply(options)
.into(mIv);
}
/**
* 通过GlideApp加载网络图片
* @param img
*/
private void glideAppLoadUrlImage(String img){
GlideApp.with(this)
.load(img)
.injectOptions()
.into(mIv);
}
}
.with()-创建图片加载实例
.load()-指定加载的图片资源
.into() - 指定图片的加载控件
第一种:对配置Glide进行封装类
package com.example.loadimagedemo;
import com.bumptech.glide.request.RequestOptions;
public class GildeOptionsUtils {
public static RequestOptions baseOptions(){
return new RequestOptions()
.placeholder(R.mipmap.ic_launcher)//加载过程中的图片
.error(R.mipmap.ic_launcher);//加载失败时的图片
}
public static RequestOptions circleCropOptions(){
return baseOptions().circleCrop();
}
}
第二种:Generated API
集成库可以为Generated API扩展自定义选项
在Application模块中可将常用的选项打包一个选项使用
使用的流程
一、引入Generaed API的支持库
二、创建类,继承AppGildeModule并添加@GlideModule注解
三、创建类,添加@GlideExtension注解,并实现private构造函数
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
在gradle中的build.gradle中同时添加
repositories {
mavenCentral()
}
package com.example.loadimagedemo;
import com.bumptech.glide.module.AppGlideModule;
import com.bumptech.glide.annotation.GlideModule;
/**
* 生成GlideApp对象
*/
@GlideModule
public class MyAppGlideModule extends AppGlideModule {
}
package com.example.loadimagedemo;
import com.bumptech.glide.annotation.GlideExtension;
import com.bumptech.glide.annotation.GlideOption;
import com.bumptech.glide.request.RequestOptions;
@GlideExtension
public class MyGlideExtension {
private MyGlideExtension(){
}
/**
* 全局统一配置
* @param options
*/
@GlideOption
public static void injectOption(RequestOptions options){
options.placeholder(R.mipmap.ic_launcher)//加载过程中的图片
.error(R.mipmap.ic_launcher)//加载失败时的图片
.circleCrop();
}
}