图片加载框架Glide使用解析及其高级用法

图片加载框架Glide的使用解析及其高级用法

1.Glide项目简介

2.普通图片加载方法与Glide图片加载对比

3.Glide的高级使用方法(一)

4.Glide的高级使用方法(二)

5.Glide使用常用方法

6.RequestOptions的常用配置

.
.
1.Glide项目简介

Glide在安卓中不算是一个新的技术,但却是使用的比较火热的图片加载框架。在GitHuB上有28.2K颗星也体现了广大开发者对Glide的喜爱.我们要使用Glide的话需要在依赖库中加入如下代码:

  implementation 'com.github.bumptech.glide:glide:4.11.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'

在这里插入图片描述

2.普通图片加载方法与Glide图片加载对比

2.1首先编写一个只有一个按钮和一个ImageView的布局,然后在Activity中绑定控件,开通网络权限等基本操作。
2.2用普通方法加载网络中的图片

  /*
    用普通方法加载网络中的图片给共分三步
    1.找到图片地址
    2.根据图片地址转化为可被加载的对象
    3.通过imageView来加载图片
     */
    private void loadImage(final String img)
    {
        //加载网络图片是耗时操作,需要新开线程
        new Thread()
        {
            @Override
            public void run() {
                super.run();
                Message message = Message.obtain();//从消息池取出的message
                try {
                    //使用HttpURLConnection进行网络请求
                    URL url = new URL(img);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.setRequestMethod("GET");
                    int code = httpURLConnection.getResponseCode();
                    //如果请求成功
                    if (code == 200)
                    {
                        InputStream inputStream = httpURLConnection.getInputStream();
                        //将inputstream转换为可被加载的BitMap对象
                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                        message.what = 200;
                        message.obj = bitmap;

                    }
                    else
                    {
                        message.what = code;
                    }
                    
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                finally {
                    handler.sendMessage(message);//使用Handler将message发送出去
                }
            }
        }.start();

    }

//在Handlerzhong 


 private Handler handler = new Handler()
    {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch (msg.what)
            {
                case 200:
                {
                    //请求成功
                    Bitmap bitmap = (Bitmap) msg.obj;
                    imageView1.setImageBitmap(bitmap);
                    break;
                }
                default:
                {
                    break;
                }
            }
        }
    };

2.3使用Glide加载网络中的图片

    /*
    1.调用.with方法来创建图片加载实例
    2.调用.load方法选择图片来源
    3.调用.into方法来配置图片载体
     */
    private void glideLoadImage(String url)
    {
    //这段代码对图片进行了处理,可以不用使用
        RequestOptions options = new RequestOptions()
                .placeholder(R.mipmap.ic_launcher)//加载网络图片是显示的图片
                .error(R.mipmap.ic_launcher)//请求出错的时候显示的图片
                .circleCrop();//将图片变为圆形

//一般情况下只用下方的代码即可完成加载图片的需求
        Glide.with(this)
                .load(url)
               .apply(options)
               .into(imageView1);
    }

通过对比两段代码我们可以一眼看出了使用了Glide后的代码变得更加的简洁简单。

3.Glide的高级使用方法(一)
在上面的代码中我们用了RequestOptions来配置加载的图片。但如果每加载一次图片就写一次RequestOptions也太麻烦了,所以我们就需要对RequestOptions进行封装。

public class GlideOptionsUtils
{
    //生成一个基本的RequestOptions
    public static RequestOptions baseOptionss()
    {
        return new RequestOptions()
                .placeholder(R.mipmap.ic_launcher)
                .error(R.mipmap.ic_launcher);

    }
    //对基本的RequestOptions进行个性化处理
    public static RequestOptions circleOptions()
    {
        return baseOptionss().circleCrop();
    }
}

然后我们在原来的Glide使用的地方稍加修改即可:

    private void glideLoadImage(String url)
    {
        //这段代码对图片进行了处理,可以不用使用
        RequestOptions options = new RequestOptions()
                .placeholder(R.mipmap.ic_launcher)//加载网络图片是显示的图片
                .error(R.mipmap.ic_launcher)//请求出错的时候显示的图片
                .circleCrop();//将图片变为圆形

//一般情况下只用下方的代码即可完成加载图片的需求
        Glide.with(this)
                .load(url)
     ****           .apply(GlideOptionsUtils.circleOptions())
                .into(imageView1);
    }

以后如果有别的新需求只要对baseOptions进行加工,生成一个新的方法即可。

4.Glide的高级使用方法(二)
Glide给我们了Generated API 来进行对图片的处理。
4.1
编写一个类继承自AppGlideModule ,并用@GlideModule进行注解

/*
生成GlideApp对象
 */
@GlideModule
public class MyAppGlideModule extends AppGlideModule {
}

4.2

@GlideExtension
public class MyGlideEctension
{
    private MyGlideEctension(){}


    /**
     * 全局统一配置
     * @param options
     */
    @GlideOption
    public static BaseRequestOptions<?> miniThumb(BaseRequestOptions<?> options) {
        return options .placeholder(R.mipmap.ic_launcher)
                .error(R.mipmap.ic_launcher)
                .circleCrop();
    }
}

4.3使用方法

 /**
     * 通过GlideAPP加载网络图片
     */

    private void glideAppLoadUrlImage(String img)
    {
        GlideApp.with(this)
                .load(img)
                .miniThumb()
                .into(imageView1);
    }

5.Glide的常用方法

  Glide.with(this)//此方法返回RequestManager对象
        .load(url)//返回RequestBuilder对象
        .apply(options)//设置Reauestion
        .thumbnail(Glide.with(this)//加载缩略图,如果目标图片先于缩略图加载,则缩略图停止加载
                        .load(Thumbnailurl))
        .error(Glide.with(this)//加载缩略图,如果目标图片先于缩略图加载,则缩略图停止加载
                        .load(errorImageUrl))//加载失败时,执行新的加载
        .transition(GenericTransitionOptions.<Drawable>with(R.anim.fade))//占位图到主图的的动画效果,比较损耗性能
        .listener(new RequestListener<Drawable>() {
        //监听图片加载
        返回fals表示没有被处理,会向下传递。
        返回true表示已经被处理,不会向下传递 
            @Override
            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                //图片加载失败
                return false;
            }

            @Override
            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                //图片加载成功
                return false;
            }
        })
                .into(imageView1);//设置目标容器

6.RequestOptions的常用配置

   RequestOptions options = new RequestOptions()
                .placeholder(R.mipmap.ic_launcher)//加载网络图片显示的占位图
                .error(R.mipmap.ic_launcher)//请求出错的时候显示的图片
                .circleCrop();//将图片变为圆形
                .timeout(5*1000)//图片加载超时时间
                .override(width,height);

关于Glide的使用大概就是这些,后续我会上传Demo供大家参考。

Demo在这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值