初探Google推荐的Android图片加载框架Glide

简介

现在在Android上加载图片的框架都已经烂大街了,所以我们这里也不说谁好谁坏,当然也不做比较了,因为得出的结果都是片面的,没有谁好谁坏只有适不适合需求罢了

起因是在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个叫Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年Google I/O大会上发布的官方App。需要特别说明的是这个不是一个官方库,个人感觉和Picasso特别像,当然这是第一个感觉,其实内部还真不太一样,这是英文地址当然国内也翻译的参考这个里

当然啦还是安装我写博客的一贯作风啦,上来还是先运行下Demo,这样既然查看到要学这个库一些效果,更能理解大神的项目架构,多学学大神们的项目架构还是很有帮助的

运行Demo

首先我来到Glide的github上,可以看到这么多内

是不是一大部分看到这么多文件,都蒙蔽了,这

按照Build的方式下载源代码,而不是通过Download zip来下载,这里简单总结下步骤

git clone https://github.com/bumptech/glide.git

我们将代码clone到本地,然后使用android studio导入选择最外层的build.gradle文件,成功导入后如下图

其中:
library:是glide的源码
samples:里面都是demo了
third_party:是library的一些依赖库

现在我们可以运行一下其中的demo了,我们这里运行gallery,可以直接在android studio中运行,可以使用如下命令:

./gradlew :samples:flickr:run
./gradlew :samples:giphy:run
./gradlew :samples:svg:run

可以看到这里运行的是demo下面的一个工程的run方法,我们来看看大神们是怎么实现的,我们在gallery的build.gradle文件中到了如下代码

task run(type: Exec, dependsOn: 'installDebug') {
    description 'Installs the APK and runs the main activity: "gradlew :samples:???:run"'
    commandLine "${android.sdkDirectory}/platform-tools/adb", 'shell', 'am', 'start', '-n', 'com.bumptech.glide.samples.gallery/.MainActivity'
}

这下我们就明白了他运行的run方式怎么来的了吧

还有一个值得学习的地方是,统一把sdk版本和依赖包的版本都放到了gradle.properties文件中,这样做的好处是,如果要更换版本只需要改这一个文件里面的就行了,那我们就来看看他是怎么写的吧,这里只看了gallery目录的build.gradle文件,其他的文件都差不多

apply plugin: 'com.android.application'

dependencies {
    compile project(':library')
    compile(project(':integration:recyclerview')) {
        transitive = false
    }
    compile "com.android.support:support-v4:${SUPPORT_V4_VERSION}"
    compile "com.android.support:recyclerview-v7:${SUPPORT_V7_VERSION}"
}

android {
    compileSdkVersion COMPILE_SDK_VERSION as int
    buildToolsVersion BUILD_TOOLS_VERSION

    defaultConfig {
        applicationId 'com.bumptech.glide.samples.gallery'
        minSdkVersion MIN_SDK_VERSION as int
        targetSdkVersion TARGET_SDK_VERSION as int
        versionCode 1
        versionName "1.0"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

task run(type: Exec, dependsOn: 'installDebug') {
    description 'Installs the APK and runs the main activity: "gradlew :samples:???:run"'
    commandLine "${android.sdkDirectory}/platform-tools/adb", 'shell', 'am', 'start', '-n', 'com.bumptech.glide.samples.gallery/.MainActivity'
}

可以看到${SUPPORT_V4_VERSION},COMPILE_SDK_VERSION这样的变量,然而他的值是在gradle.properties文件中设置的

COMPILE_SDK_VERSION=22
BUILD_TOOLS_VERSION=22.0.1
TARGET_SDK_VERSION=22
MIN_SDK_VERSION=10

个人觉得使用这种方式来管理一个项目的一些参数都是很不错的,比如:编译sdk版本,依赖版本或者是一些配置参数

这里可以查看到官网编译好的jar包

可以看到这个demo会显示我们手机里所有的图片

现在demo的运行就介绍到这里了,至于其他的,大家就可以自己改改demo然后运行看到效果了,现在就来说说常用的使用方法

安装依赖包

这个方式就有很多了,大家选用自己适合的方式

现在编译好的依赖

这里可以下载官方已经编译好的jar

Gradle

因为Glide的库已经上传到了jcenter,所以我们可以直接在项目最外层的build.gradle文件中添加依赖

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

Maven

<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>glide</artifactId>
  <version>3.7.0</version>
</dependency>
<dependency>
  <groupId>com.google.android</groupId>
  <artifactId>support-v4</artifactId>
  <version>r7</version>
</dependency>

Proguard

这一步非常重要,所以不管你混不混淆都添加上,不然哪天想混淆了,到处找要忽略的包,这是一件很痛苦的事情,因为你的依赖库肯定不止这一个

-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}

简单使用

这一步都很简单啦,不用过多解释,直接看代码

Glide.with(this).load(imgUrl).centerCrop().into(iv1);

设置暂未图和加载失败图

Glide.with(context).load(datas.get(position)).placeholder(R.drawable.ic_launcher).error(R.drawable.error).centerCrop().crossFade().into(holder.iv);

加载封面图

一般情况下封面图可以是一个真是图片的小图或者是低像素版

Glide.with(this).load(url).thumbnail(Glide.with(this).load(thumbUrl)).centerCrop().into(iv2);

从其他路径加载图片

通过API我们可以看见他重载了很多个方法

其中还有个自定义加载路径

加载图片到其他控件

这个需求是很常见的,比如我们需要为一个LinearLayout加载一个背景图片。其中可以用官方提供自定义Target的方法

Glide.with(this).load(imgUrl).into(new SimpleTarget<GlideDrawable>() {
    @Override
    public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
        linearLayout.setBackgroundDrawable(resource);
    }
});

调试信息

这些说明也可以在官网查看到

开启请求响应信息

在终端中执行

adb shell setprop log.tag.GenericRequest DEBUG

开启后我们可以查看logcat中输出这样的信息

开启工作流日志

意思就是可以查看到内部是怎么查找资源,例如:是从内存,还是磁盘或网络获取的资源

adb shell setprop log.tag.Engine VERBOSE
adb shell setprop log.tag.EngineJob VERBOSE
adb shell setprop log.tag.DecodeJob VERBOSE

开启后输入如下日志信息

好了,基本使用就到这里了,下一篇会从源码的角度带你熟悉Glide,这样正好也学一学大师们怎么架构一个项目的,并且还能学到一些Glide高级使用,以上测试代码在我的github上了

参考:http://www.open-open.com/lib/view/open1440397324450.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,463评论 25 707
  • 一、简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这...
    天天大保建阅读 7,451评论 2 28
  • 家有爱历史的10岁男孩一枚。儿子从书上看了一些关于北京的历史文化,他很想去看看!正好上学期有朋友问要不要暑假带孩子...
    易小珍阅读 210评论 0 0
  • 对于许多跑步爱好者来说,有没有发现一个现象,即使你已经坚持跑步相当长一段时间,但跑起来总是感觉特别气喘,似乎上气不...
    肥皂说阅读 1,638评论 4 13
  • 你 | 汪莉 你曾经那么风狂任性 整天生活在你的天真世界里 生活给了你重生的宝贵生命 好好地珍惜吧 你比这世上许许...
    汪莉_4c55阅读 220评论 4 2