Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 初探Google推薦Android圖片加載框架Glide

初探Google推薦Android圖片加載框架Glide

編輯:關於Android編程

簡介

現在在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然後運行看到效果了,現在就來說說常用的使用方法<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMiBpZD0="安裝依賴包">安裝依賴包

這個方式就有很多了,大家選用自己適合的方式

現在編譯好的依賴

這裡可以下載官方已經編譯好的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


  com.github.bumptech.glide
  glide
  3.7.0


  com.google.android
  support-v4
  r7

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() {
    @Override
    public void onResourceReady(GlideDrawable resource, GlideAnimation 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上了

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved