Android开发之什么是Glide
白羽 2018-06-07 来源 :网络 阅读 1575 评论 0

摘要:Glide 是 Google 员工的开源项目, Google I/O 上被推荐使用,一个高效、开源、Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。希望本文对大家学Android有所帮助。





Glide简介

Glide 是 Google 员工的开源项目, Google I/O 上被推荐使用,一个高效、开源、Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。


Glide特点

1、使用简单

2、支持常见图片格式Jpg png gif webp

3、支持多种数据源 网络、本地、资源、Assets 等

4、高效缓存策略 支持Memory和Disk图片缓存 默认Bitmap格式采用RGB_565内存使用至少减少一半

5、生命周期集成 根据Activity/Fragment生命周期自动管理请求高效处理Bitmap

6、使用Bitmap Pool使Bitmap复用,主动调用recycle回收需要回收的Bitmap,减小系统回收压力

7、可配置度高,自适应程度高

Glide简单使用

1.)添加引用 build.gradle 中添加配置


   

compile 'com.github.bumptech.glide:glide:版本号'

   


2.)设置绑定生命周期


   

Glide.with(Context context);// 绑定

Context Glide.with(Activity activity);// 绑定Activity

Glide.with(FragmentActivity activity);// 绑定FragmentActivity

Glide.with(Fragment fragment);// 绑定Fragment

   


3. )简单的加载图片实例


   

Glide.with(this).load(imageUrl).into(imageView);

   


4.)设置加载中以及加载失败图片api里面对placeholder()、error()函数中有多态实现 用的时候可以具体的熟悉一下




   

Glide.with(this)

 .load(imageUrl)

 .placeholder(R.mipmap.ic_launcher)

 .error(R.mipmap.ic_launcher)

 .into(imageView);

   


5.)设置跳过内存缓存


   

Glide.with(this)

.load(imageUrl)

.skipMemoryCache(true)

.into(imageView);

   


6.)设置下载优先级


   

Glide.with(this)

     .load(imageUrl)

     .priority(Priority.NORMAL)

     .into(imageView);

   


7.)设置缓存策略


   

Glide.with(this)

     .load(imageUrl)

 .diskCacheStrategy(DiskCacheStrategy.ALL)

     .into(imageView);

   


策略解说:

all:缓存源资源和转换后的资源

none:不作任何磁盘缓存

source:缓存源资源

result:缓存转换后的资源

8.)设置加载动画

api也提供了几个常用的动画:比如crossFade()


   

Glide.with(this)

.load(imageUrl)

.animate(R.anim.item_alpha_in)

.into(imageView);

   


anim代码:


<!--?xml version="1.0" encoding="utf-8"?--><set
xmlns:android="https://schemas.android.com/apk/res/android">
    </alpha></set>


9.)设置缩略图支持

这样会先加载缩略图 然后在加载全图


Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);

   


10.)设置加载尺寸


   

Glide.with(this).load(imageUrl).override(720, 1280).into(imageView);

   


11.)设置动态转换


   

Glide.with(this)

     .load(imageUrl)

     .centerCrop()

     .into(imageView);

   


api提供了比如:centerCrop()、fitCenter()等函数也可以通过自定义Transformation,举例说明:比如一个人圆角转化器


   

public class GlideRoundTransform extends BitmapTransformation {
        private float radius = 0f;
        public GlideRoundTransform(Context context) {
            this(context, 4);
        }
 
        public GlideRoundTransform(Context context, int dp) {
            super(context);
            this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
        }
 
        @Override
        protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
            return roundCrop(pool, toTransform);
        }
 
        private Bitmap roundCrop(BitmapPool pool, Bitmap source) {
            if (source == null) return null;
 
            Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
            if (result == null) {
                result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
            }
            Canvas canvas = new Canvas(result);
            Paint paint = new Paint();
            paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
            paint.setAntiAlias(true);
            RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
            canvas.drawRoundRect(rectF, radius, radius, paint);
            return result;
        }
 
        @Override
        public String getId() {
            return getClass().getName() + Math.round(radius);
        }
    }

   


具体使用


   

Glide.with(this)

     .load(imageUrl)

     .transform(new GlideRoundTransform(this))

     .into(imageView);

   


12.)设置要加载的内容

项目中有很多需要先下载图片然后再做一些合成的功能,比如项目中出现的图文混排,该如何实现目标下


   

Glide.with(this).load(imageUrl).centerCrop().into(new SimpleTarget<glidedrawable>() {

            @Override

            public void onResourceReady(GlideDrawable resource, GlideAnimation<!--? super GlideDrawable--> glideAnimation) {

                imageView.setImageDrawable(resource);

            }

        });</glidedrawable>

   


13 .)设置监听请求接口


Glide.with(this).load(imageUrl).listener(new RequestListener<string, glidedrawable="">() {

            @Override

            public boolean onException(Exception e, String model, Target<glidedrawable> target, boolean isFirstResource) {

                return false;

            }

 

            @Override

            public boolean onResourceReady(GlideDrawable resource, String model, Target<glidedrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {

                //imageView.setImageDrawable(resource);

                return false;

            }

        }).into(imageView);</glidedrawable></glidedrawable></string,>

   


设置监听的用处 可以用于监控请求发生错误来源,以及图片来源 是内存还是磁盘

15.)设置动态GIF加载方式


   

//显示gif静态图片

Glide.with(this).load(imageUrl).asBitmap().into(imageView);

//显示gif动态图片

Glide.with(this).load(imageUrl).asGif().into(imageView);

   


16.)缓存的动态清理


   

//清理磁盘缓存 需要在子线程中执行

Glide.get(this).clearDiskCache();

//清理内存缓存  可以在UI主线程中进行

Glide.get(this).clearMemory();

   


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

 


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 1
看完这篇文章有何感觉?已经有1人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程