文档章节

图片加载框架--Glide用法

蜗牛崛起
 蜗牛崛起
发布于 2017/02/07 16:16
字数 1714
阅读 23
收藏 0
点赞 0
评论 0

Glide是一个加载图片的库,他可以从多个源加载图片,如:网络,本地,Uri等,加载默认的Bitmap格式是RGB_565;

它在缓存处理方面有着很大的优势并且支持加载Gif动画以及本地Video;

Glide内部默认是通过HttpURLConnection网络方式加载图片的;

但是Glide要注意,这个库是要依赖于support liberary v4的。

  • (一)配置

在我们的builde.gradle文件中配置库

dependencies {
  compile 'com.github.bumptech.glide:glide:3.7.0'
  compile 'com.android.support:support-v4:19.1.0'
}

若加载不了库,可以从网上下载glide.jar ,拷贝到libs下,右击glide.jar,选择as library,添加到工程中。

  • (二)使用

Glide.with(context).load("http://img2.3lian.com/2014/f6/173/d/51.jpg").into(imageView);

with()可接受三种参数:Context 、Activity、FragmentActivity,这也是Glide的亮点,它能根据传入参数Activity/Fragment的生命周期保持一致,去暂停和执行图片加载,这也节省了不必要的流量浪费。

1、加载图片方式

String参数加载

Glide.with(this).load("http://img2.3lian.com/2014/f6/173/d/51.jpg").into(imageView);

资源文件加载

Glide.with(context).load(R.mipmap.image).into(imageView);

本地文件加载

File file = new File(Environment.getExternalStorageDirectory() + File.separator + "image", "image.jpg");

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

Uri加载

File file = new File(Environment.getExternalStorageDirectory() + File.separator + "image", "image.jpg");

Uri uri = Uri.fromFile(file);

Glide.with(this).load(uri).into(imageView);//uri加载方式

_ 2、加载Gif_

Glide.with(context).load("http://img1.3lian.com/2015/w4/17/d/64.gif").asGif().error(R.mipmap.error).placeholder(R.mipmap.place).into(imageView); //加载gif图片

Glide还提供了Gif相关操作的两个方法。

asBitmap() -- 显示Gif图片的第一帧;

asGif() -- 严格显示成Gif,那么当传入了一个非Gif 的url时,我们当做错误处理;

placeholder 占位符

placeholder设置给ImageView一个占位符,用于正在加载网络图片时显示的内容。

Glide.with(context).load("http://img2.3lian.com/2014/f6/173/d/55.jpg").placeholder(R.mipmap.place).into(imageView);

error

加载网络图片错误时,显示的内容,提示用户当前图片加载失败。

Glide.with(context).load("http://img2.3lian.com/2014/f6/173/d/55.jpg").error(R.mipmap.error).into(imageView);

Glide为我们提供了listener()方法,接收RequestListener对象。


//设置错误监听
         RequestListener<String,GlideDrawable> errorListener=new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
 
                Log.e("onException",e.toString()+"  model:"+model+" isFirstResource: "+isFirstResource);
                imageView.setImageResource(R.mipmap.ic_launcher);
                return false;
            }
 
            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                Log.e("onResourceReady","isFromMemoryCache:"+isFromMemoryCache+"  model:"+model+" isFirstResource: "+isFirstResource);
                return false;
            }
        } ;

Glide.with(context).load("http://img2.3lian.com/2014/f6/173/d/55.jpg").listener(errorListener).into(imageView);

我们看到有两个回调方法,通过onException是图片加载异常回调,onResourceReady是加载成功的回调。我们可以测试不同情况打印的日志。

正确的url首次加载 isFromMemoryCache:false

正确的url第二次加载 isFromMemoryCache:true

错误url onException: java.io.IOException: Request failed 404: Not Found

无网络 onException: java.net.UnknownHostException

通过日志我们很容易看出异常的原因,因此,我们可以针对不同的操作情形,书写自己的处理给用户反馈。

*crossFade

实现占位符图片到加载图片平滑过渡效果,实际新api已经默认实现一个渐入渐出的动画效果,默认是300ms.

Glide.with(context).load("http://").error(R.mipmap.error).placeholder(R.mipmap.place).crossFade().into(imageView);

crossFade()还可以接收一个int型的参数,用它来指定动画执行的时间 crossFade(2000);

dontAnimate()

直接显示图片而没有任何淡入淡出效果

//Glide.with(context).load("http://").dontAnimate().into(imageView);

3、图片调整

Glide加载图片大小是自动调整的,他根据ImageView的尺寸自动调整加载的图片大小,并且缓存的时候也是按图片大小缓存,每种尺寸都会保留一份缓存,如果图片不会自动适配到 ImageView,调用 override(horizontalSize, verticalSize) 。这将在图片显示到 ImageView之前重新改变图片大小

//Glide.with(context).load("http://").dontAnimate().override(400,600).fitCenter().into(imageView);

注意override接收的参数是像素(px)

对于任何图像操作,调整大小可能让图片失真。但是我们要尽可能的避免发生这种情况发生。Glide 提供了两个图形装换的操作提供了两个标准选项:centerCrop 和 fitCenter

4、Glide网络加载方式

Glide内部默认是通过HttpURLConnection网络方式加载图片的,并且支持OkHttp,Volley

在gradle文件加入下面代码

//自动集成okhttp
    compile 'com.github.bumptech.glide:okhttp-integration:1.4.0@aar'
    compile 'com.squareup.okhttp:okhttp:2.2.0'

//自动集成volley
    compile 'com.github.bumptech.glide:volley-integration:1.4.0@aar'
    compile 'com.mcxiaoke.volley:library:1.0.19'

Gradle 会自动合并必要的 GlideModule 到Android.Manifest。Glide 会认可在 manifest 中的存在,然后使用 所集成的网络连接。

5、自定义动画

在前面我们已经提到过Glide提供了一个渐入渐出的动画效果,当然该动画不是那么酷炫,而且有时并不能达到我们想要的效果,不过Glide给我们提供了animate()方法,我们可以通过此方法实现我们自定义的动画效果。

本例实现了一个图片从小变大并且有一个旋转效果的动画。

资源文件方式

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="false"
    android:duration="3000">
 
    <scale
        android:duration="@android:integer/config_longAnimTime"
        android:fromXScale="0.1"
        android:fromYScale="0.1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1"/>
    <rotate
        android:fromDegrees="0"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        />
</set>

Glide.with(context).load("http:").animate(R.anim.anim).into(imageView);

java实现方式


 //java文件设置动画
        ViewPropertyAnimation.Animator animator=new ViewPropertyAnimation.Animator() {
            @Override
            public void animate(View view) {
              view.setAlpha(0f);
                ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
                fadeAnim.setDuration( 2500 );
                fadeAnim.start();
            }
        };
        Glide.with(context).load("http://img2.3lian.com/2014/f6/173/d/51.jpg").animate(animator).into(imageView);

6、Target

Glide不但可以把图片、视频剧照、GIF动画加载到View,还可以加载到自定义的Target实现中。

SimpleTarget


 //SimpleTarget
        SimpleTarget target = new SimpleTarget<Drawable>(){
            @Override
            public void onResourceReady(Drawable resource, GlideAnimation<? super Drawable> glideAnimation) {
                textView.setBackground(resource);
            }
        };
       Glide.with(context)
                .load("http://img2.3lian.com/2014/f6/173/d/51.jpg")
                .animate(animator)
                .into(target);

上面的代码我们将TextView作为Target,将加载的图片设为背景,对于SimpleTarget是接收的泛型数据,如果我们需要Bitmap对象,我们将泛型为Bitmap.以及其它我们想要的类型。 我们还可以指定加载的宽和高,如下,设置宽和高都是100,单位是px

SimpleTarget target = new SimpleTarget<Drawable>(100,100){
            @Override
            public void onResourceReady(Drawable resource, GlideAnimation<? super Drawable> glideAnimation) {
                textView.setBackground(resource);
            }
        };

ViewTarget

如果你想加载一个图片到View中,但是你想观察或者覆盖Glide的默认行为。你可以覆盖ViewTarget或者它的子类。 当你想让Glide来获取view的的大小,但是由自己来启动动画和设置资源到view中,ViewTarget是个不错的选择。如果你要加载一个图片到ImageView之外的自定义view中,那么ImageViewTarget或者它的子类就不能满足你的要求,此时继承ViewTarget就特别合适。 你可以静态的定义一个ViewTarget的子类,或者传递一个匿名内部类到你的加载调用里:

Glide.with(yourFragment)
    .load(yourUrl)
    .into(new ViewTarget<YourViewClass, GlideDrawable>(yourViewObject) {
        @Override
        public void onResourceReady(GlideDrawable resource, GlideAnimation anim) {
            YourViewClass myView = this.view;
            // Set your resource on myView and/or start your animation here.
        }
    });

© 著作权归作者所有

共有 人打赏支持
蜗牛崛起
粉丝 3
博文 127
码字总数 63547
作品 0
东城
程序员
Android图片加载框架:Glide的常用用法|SquirrelNote

我的系列文章 Android图片加载框架:Glide的常用用法|SquirrelNote Android图片加载框架:Glide源码解析|SquirrelNote 前言 现在Android上的图片加载框架非常成熟,从最早的图片加载框架Uni...

跳动的松鼠
2017/11/18
0
0
Android图片加载框架最全解析(一),Glide的基本用法

转载请注明出处:http://blog.csdn.net/guolinblog/article/details/53759439 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 现在A...

sinyu890807
2017/03/21
0
0
Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

转载请注明出处:http://blog.csdn.net/guolinblog/article/details/78582548 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 本篇将...

sinyu890807
2017/12/19
0
0
Android图片加载框架最全解析(六),探究Glide的自定义模块功能

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/72866313 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 不知...

sinyu890807
2017/10/09
0
0
Android图片加载框架最全解析(四),玩转Glide的回调与监听

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/70215985 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 大家...

sinyu890807
2017/06/20
0
0
Android图片缓存之初识Glide

前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架。技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自...

丁佳辉
2017/10/18
0
0
Android Studio 第五十四期 - 超级巨图Glide3.7和Glide4.1.1优化加载方案

相信大家看到上面的巨图会很懵逼~最近产品经理朝令夕改,有点烦,要不是还有外包项目在做,就不想干了,所以忍了,先做完十一后再说,毕竟找工作还是有点折腾,需要更高的薪水和技术的沉淀。...

吴雨声
2017/09/19
0
0
Android图片加载框架最全解析(五),Glide强大的图片变换功能

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/71524668 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 大家...

sinyu890807
2017/08/29
0
0
Android图片加载框架最全解析(三),深入探究Glide的缓存机制

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/54895665 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 在本...

sinyu890807
2017/05/23
0
0
图片加载框架Glide

本人之前就是网络加载图片各种费劲,而且还有另开线程,非常麻烦,代码量多且复杂,后来接触到图片加载框架Glide,发现太好用了,支持各种格式还有GIF,支持本地和网络等加载,只要几行代码,...

请叫我Mr-He
2016/11/11
76
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
3
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部