implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android">
<base-config cleartextTrafficPermitted="true"/>
</network-security-config>
编译报错
android.support.annotation.CheckResult;
添加依赖:
annotationProcessor 'androidx.annotation:annotation:1.0.0'
package com.example.testapplication;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.example.testapplication.util.GlideOptionsUtils;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class ImocGildeActivity extends AppCompatActivity {
private ImageView mIv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imocgilde);
mIv = findViewById(R.id.iv);
}
public void onLoadImageClick(View view){
// 使用 HttpURLConnection 来加载网络中的图片
//loadUrlImage("https://www.imooc.com/static/img/index/logo.png");
// 但是当网络图片过大时,会导致我们生成的bitmap所占用的内存过多,从而导致 OOM
// loadUrlImage("http://res.lgdsunday.club/big_img.jpg");
// 同样,当我们在加载本地资源文件中的图片时,如果图片过大,一样会导致 OOM
// loadResImage(R.mipmap.big_img);
// 使用 Glide 来去图片的时候,Glide则会帮助我们处理上面的问题
//glideLoadImage("http://res.lgdsunday.club/big_img.jpg");
glideAppLoadImage("https://img2.mukewang.com/5b037fb30001534202000199-140-140.jpg");
}
private void glideAppLoadImage(String img) {
GlideApp.with(this).load(img).injectOptions().into(mIv);
}
// 通过Glide加载网络图片
private void glideLoadImage(String img) {
// 通过RequestOption 对象来设置Glide的设置
RequestOptions options = new RequestOptions()
// 设置图片圆角
.circleCrop()
// 设置站位图
.placeholder(R.mipmap.loading)
// 设置加载失败的错误图片
.error(R.mipmap.loader_error);
// Glide.with 会创建一个图片的实例,接收 Context、Activity、Fragment
Glide.with(this)
// 指定需要加载的图片资源,接收 Drawable对象、网络图片地址、本地图片文件、资源文件、二进制流、Uri对象等等
.load(img)
// 指定配置
// .apply(options)
// 封装配置
.apply(GlideOptionsUtils.circleCropOptions())
// 用于展示图片的ImageView
.into(mIv);
}
private void loadUrlImage(String img) {
// 开启子线程,用于进行网络请求
new Thread(){
@Override
public void run() {
// 创建消息对象,用于通知handler
Message message = new Message();
try {
// 根据传入的路径生成对应的URL
URL url = new URL(img);
// 创建连接
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
// 设置请求方式为GET
httpURLConnection.setRequestMethod("GET");
// 获取返回码
int code = httpURLConnection.getResponseCode();
// 当返回码为200时,表示请求成功
if (code == 200) {
// 获取数据流
InputStream inputStream = httpURLConnection.getInputStream();
// 利用位图工程根据数据流生成对应的位图对象
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// 利用message对象将生成的bitmap携带到handler
message.obj = bitmap;
// 成功的状态码
message.what = 200;
} else {
// 失败的状态码
message.what = code;
}
} catch (Exception e) {
e.printStackTrace();
// 当出现异常的时候,状态码设置为 -1
message.what = -1;
} finally {
// 通知handler
handler.sendMessage(message);
}
}
}.start();
}
/**
* 加载本地图片
* @param resId 本地图片ID
*/
private void loadResImage (int resId) {
mIv.setImageResource(resId);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
// 当获取到成功的状态码时执行
case 200:
// 获取携带的bitmap
Bitmap bitmap = (Bitmap) msg.obj;
// imageView展示
mIv.setImageBitmap(bitmap);
break;
// 当请求失败获取出现异常的时候回调
default:
// 展示加载失败的图片
mIv.setImageResource(R.mipmap.loader_error);
// 打印失败的状态码
Toast.makeText(ImocGildeActivity.this, "code: " + msg.what , Toast.LENGTH_SHORT).show();
break;
}
}
};
}
package com.example.testapplication.util;
import com.bumptech.glide.request.RequestOptions;
import com.example.testapplication.R;
// 图片加载工具类
public class GlideOptionsUtils {
public static RequestOptions baseOptions(){
return new RequestOptions()
.placeholder(R.mipmap.loading)
.error(R.mipmap.loader_error);
}
public static RequestOptions circleCropOptions(){
return baseOptions().circleCrop();
}
}
package com.example.testapplication;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
/**
* 生成GliderApp对象
* */
@GlideModule
public class MyAppGlideModule extends AppGlideModule {
}
package com.example.testapplication;
import com.bumptech.glide.annotation.GlideExtension;
import com.bumptech.glide.annotation.GlideOption;
import com.bumptech.glide.request.RequestOptions;
@GlideExtension
public class MyGlideExtension {
// 实现private的构造函数
private MyGlideExtension(){}
/**
* 全局统一配置
* */
@GlideOption
public static void injectOptions(RequestOptions options){
options.circleCrop().placeholder(R.mipmap.loading).error(R.mipmap.loader_error);
}
}