初探Google推薦Android圖片載入架構Glide

來源:互聯網
上載者:User

標籤:

    • 簡介
    • 運行Demo
    • 安裝依賴包
      • 現在編譯好的依賴
      • Gradle
      • Maven
    • Proguard
    • 簡單使用
    • 設定暫未圖和載入失敗圖
    • 載入封面圖
    • 從其他路徑載入圖片
    • 載入圖片到其他控制項
    • 調試資訊
      • 開啟請求響應資訊
      • 開啟工作流程日誌

簡介

現在在Android上載入圖片的架構都已經爛大街了,所以我們這裡也不說誰好誰壞,當然也不做比較了,因為得出的結果都是片面的,沒有誰好誰壞只有適不適合需求罷了

起因是在泰國舉行的Google開發人員論壇上,Google為我們介紹了一個叫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=22BUILD_TOOLS_VERSION=22.0.1TARGET_SDK_VERSION=22MIN_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 VERBOSEadb shell setprop log.tag.EngineJob VERBOSEadb shell setprop log.tag.DecodeJob VERBOSE

開啟後輸入如下日誌資訊

好了,基本使用就到這裡了,下一篇會從源碼的角度帶你熟悉Glide,這樣正好也學一學大師們怎麼架構一個項目的,並且還能學到一些Glide進階使用,以上測試代碼在我的github上了

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

初探Google推薦Android圖片載入架構Glide

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.