慕课_Gilde(图片加载框架)

 

 

 

 

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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值