Java教程

Glide

本文主要是介绍Glide,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

这篇关于Glide的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!