文档章节

图片加载框架--Glide用法

蜗牛崛起
 蜗牛崛起
发布于 2017/02/07 16:16
字数 1714
阅读 31
收藏 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 Studio 第六十七期 - Android Glide3.7.0和3.8.0用法

一、前言:再优秀的开源库都有坑要填 手上的项目使用的图片加载框架是:Universal-Image-Loader+业务需要定制化的一些代码。Universal-Image-Loader 这个框架是一个非常经典好用的框架,唯一...

吴雨声
07/23
0
0
Android图片加载框架最全解析(六),探究Glide的自定义模块功能

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

sinyu890807
2017/10/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Win10 下安装Win7双系统

很多人买了预装64位Win8/8.1的电脑后想重装(或者再安装一个)Win7系统,但是折腾半天发现以前的方法根本不奏效。这是因为预装Win8/8.1的电脑统一采用了UEFI+GPT引导模式,传统的BIOS(Legacy...

yaly
13分钟前
0
0

中国龙-扬科
22分钟前
1
0
假若明天来临——《AI.未来》读后感3900字

假若明天来临——《AI.未来》读后感3900字: 你有没有想过,如果有一天你被确诊为癌症患者,你会做些什么?你有没有想过,在你百年之后,你希望你的墓碑上刻写着什么内容? 在我翻开李开复老...

原创小博客
28分钟前
1
0
tomcat线程模型

Connector结构 BIO模式 NIO模式

grace_233
今天
2
0
Javascript

变量定义 以$,_,字母开头 大小写敏感 var 关键字声明变量 声明未赋值undefined 数据类型 字符串,数字,布尔,数组,NULL,undefined 变量均为对象 函数 无默认值 var声明的是局部变量 函数外声明...

关元
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部