美文网首页
Android图片加载框架:Glide的基本用法

Android图片加载框架:Glide的基本用法

作者: 芝士晓哥 | 来源:发表于2017-11-15 19:43 被阅读0次

    一 Glide的基本用法:

    声明:本文是基于郭霖大神的CSDNAndroid图片加载框架最全解析(一),Glide的基本用法博客学习,自己总结,方便后续学习使用,原文链接戳此处郭霖大神CSDN

    1.1添加依赖

    目前,Glide最新的稳定版本是3.7.0;在app/build.gradle文件当中添加如下依赖

    dependencies {
        compile 'com.github.bumptech.glide:glide:3.7.0'
    }
    

    Glide中加载网络图片需要用到网络功能,因此你还得在AndroidManifest.xml中声明一下网络权限才行:

    <uses-permission android:name="android.permission.INTERNET" />
    

    二 基本使用

    先看下效果图:简单的加载一张图片

    image.png

    2.1 xml中布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.aliang.glidedemo.MainActivity">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="240dp"
            android:src="@mipmap/ic_launcher"
            android:id="@+id/image"/>
    </LinearLayout>
    

    2.2 找到控件,设置图片

    ImageView img = (ImageView) findViewById(R.id.image);
        Glide.with(this)
             .load(R.drawable.meinv)
             .into(img);
    

    一张本地的图片已经被成功加载,并且展示到ImageView上了
    分析:调用Glide.with()方法用于创建一个加载图片的实例。with()方法可以接受Context,Activity,Fragment,类型的参数。我们选择的范围非常广,不管是在Activity还是Fragment中调用with()方法,都可以直接传this。如果调用的地方既不在Activity或者Fragment,我们可以获取当前应用程序的ApplicationContext,传入到with()方法当中。
    注意
    with()方法中传入的实例会决定Glide加载图片的生命周期,如果传入的是Activity或者Fragment的实例,那么当这个Activity或Fragment被销毁的时候,图片加载也会停止。如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止。

    看下load()这个方法:
    这个方法用于指定待加载的图片资源。Glide支持加载各种各样的图片资源,包括网络图片、本地图片、应用资源、二进制流、Uri对象等等。因此load()方法也有很多个方法重载,除了我们刚才使用的加载一个字符串网址之外,你还可以这样使用load()方法:

    // 加载本地图片
    File file = new File(getExternalCacheDir() + "/image.jpg");
    Glide.with(this).load(file).into(imageView);
    // 加载应用资源
    int resource = R.drawable.image;
    Glide.with(this).load(resource).into(imageView);
    // 加载二进制流
    byte[] image = getImageBytes();
    Glide.with(this).load(image).into(imageView);
    // 加载Uri对象
    Uri imageUri = getImageUri();
    Glide.with(this).load(imageUri).into(imageView);
    

    最后看一下into()方法
    这个方法就很简单了,我们希望让图片显示在哪个ImageView上,把这个ImageView的实例传进去就可以了。当然,into()方法不仅仅是只能接收ImageView类型的参数,还支持很多更丰富的用法。


    Glide最基本的使用方式,其实就是关键的三步走:先with(),再load(),最后into()。


    2.3 占位图

    占位图就是指在图片的加载过程中,我们先显示一张临时的图片,等图片加载出来了再替换成要加载的图片。
    图片Url错误时,显示占位图(只是为了显示占位图)

    ImageView img = (ImageView) findViewById(R.id.img);
            Glide.with(this)
                    .load("wwww")
                    .placeholder(R.drawable.test)
                    .into(img);
        }
    
    image.png

    修改代码如下:

     ImageView img = (ImageView) findViewById(R.id.img);
            Glide.with(this)
                    .load(R.drawable.dog)
                    .placeholder(R.drawable.test)
                    .into(img);
    

    成功后显示load加载的图片


    image.png

    就是这么简单。我们只是在刚才的三步走之间插入了一个placeholder()方法,然后将占位图片的资源id传入到这个方法中即可。另外,这个占位图的用法其实也演示了Glide当中绝大多数API的用法,其实就是在load()和into()方法之间串接任意想添加的功能就可以了。

    当然,这只是占位图的一种,除了这种加载占位图之外,还有一种异常占位图。异常占位图就是指,如果因为某些异常情况导致图片加载失败,比如说手机网络信号不好,这个时候就显示这张异常占位图。

     ImageView img = (ImageView) findViewById(R.id.img);
            Glide.with(this)
                    .load("www")
                    .placeholder(R.drawable.test)
                    .error(R.drawable.error)
                    .into(img);
    

    串接了一个error()方法就可以指定异常占位图了。
    显示如下:


    image.png

    这样我们就把Glide提供的占位图功能都掌握了

    2.4 指定图片格式

    Glide另外一个强大的功能,那就是Glide是支持加载GIF图片的
    Glide加载GIF图并不需要编写什么额外的代码,Glide内部会自动判断图片格式。比如这是一张GIF图片的URL地址:

    http://p1.pstatp.com/large/166200019850062839d3
    

    只需要将刚才那段加载图片代码中的URL地址替换成上面的地址就可以了,运行后结果:


    demo.gif

    也就是说,不管我们传入的是一张普通图片,还是一张GIF图片,Glide都会自动进行判断,并且可以正确地把它解析并展示出来。
    指定图片的格式该怎么办呢?就比如说,我希望加载的这张图必须是一张静态图片,我不需要Glide自动帮我判断它到底是静图还是GIF图。

    想实现这个功能仍然非常简单,我们只需要再串接一个新的方法就可以了,如下所示:

    Glide.with(this)
                    .load(R.drawable.dynamic)
                    .asBitmap()
                    .into(img);
    

    在load()方法的后面加入了一个asBitmap()方法,这个方法的意思就是说这里只允许加载静态图片,不需要Glide去帮我们自动进行图片格式的判断了。
    运行程序,结果如下


    图片.png

    调用了asBitmap()方法,现在GIF图就无法正常播放了,而是会在界面上显示第一帧的图片。

    类似地,我们能强制指定加载静态图片,就也能强制指定加载动态图片。比如说我们想要实现必须加载动态图片的功能,就可以这样写:

    Glide.with(this)
                  .load(R.drawable.dynamic)
                  .asGif()
                  .into(img)
    

    如果指定了只能加载动态图片,而传入的图片却是一张静图的话,那么结果自然就只有加载失败.

    相关文章

      网友评论

          本文标题:Android图片加载框架:Glide的基本用法

          本文链接:https://www.haomeiwen.com/subject/farqvxtx.html