首先在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 onl oadImageClick(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(); } }