編輯:關於Android編程
簡介
現在在Android上加載圖片的框架都已經爛大街了,所以我們這裡也不說誰好誰壞,當然也不做比較了,因為得出的結果都是片面的,沒有誰好誰壞只有適不適合需求罷了
起因是在泰國舉行的谷歌開發者論壇上,谷歌為我們介紹了一個叫Glide 的圖片加載庫,作者是bumptech。這個庫被廣泛的運用在google的開源項目中,包括2014年Google I/O大會上發布的官方App。需要特別說明的是這個不是一個官方庫,個人感覺和Picasso特別像,當然這是第一個感覺,其實內部還真不太一樣。
當然啦還是安裝我寫博客的一貫作風啦,上來還是先運行下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
因為Glide的庫已經上傳到了jcenter,所以我們可以直接在項目最外層的build.gradle文件中添加依賴
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}
com.github.bumptech.glide
glide
3.7.0
com.google.android
support-v4
r7
這一步非常重要,所以不管你混不混淆都添加上,不然哪天想混淆了,到處找要忽略的包,這是一件很痛苦的事情,因為你的依賴庫肯定不止這一個
-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上了
最近在學習gradle,innost的這篇文章可以說是目前中文說gradle最好的文章深入理解 Android 之 Gradle.文章名字雖然叫深入理解,但是其實講的也不
從一開始寫Android程序,就被告知這些常識一、dp(或者dip device independent pixels)一種基於屏幕密度的抽象單位。在每英寸160點的顯示
寫在前面:作為一個剛半只腳踏入android開發的新手,在使用eclipse開發了兩個自我感覺不甚成熟的商城類app之後,遇到了一些問題,總結為如下:1,代碼復用性。fi
ListView實現二級節點想必大家都知道可以用ExpandableListView 就可以輕松實現,但是要實現3級甚至多級菜單怎麼實現呢? 再利用ExpandableL