編輯:關於Android編程
目前使用非常廣泛的框架技術主要有Android Universal Image Loader,Picasso, Glide和Fresco,最開始出現的應該算是UIL(Universal Image Loader),記得剛開始用圖片加載框架的時候,主要就是使用UIL,UIL功能豐富。Picasso是Square搞出來的,Glide與Picasso比較類似,Google推薦Glide,Fresco是Facebook推出的一個圖片加載庫,這個庫非常值得一看,裡面有很多很有特色的地方,非常強大的一個開源庫。除此之外Volley也是一個很好的圖片加載框架,非常輕量。
這些框架基本都可以分成這麼幾個部分:執行引擎(Engine,或者說調度中心),請求生成部分,緩存部分,圖片處理部分,圖片顯示部分。這基本涵蓋了圖片從網絡或本地獲取過來,顯示給用戶的整個流程。
下面簡單介紹一下他們的優缺點:
Android-Universal-Image-Loader: 是最早的圖片加載庫,應用也最廣泛,功能非常豐富。它支持下載監聽,提供了很多緩存算法,可以在滾動中暫停加載 Picasso:網絡上面關於這些圖片開源框架的源碼分析還是挺多的,不過這些源碼分析一般都僅供參考輔助,如果自己需要了解這些源碼的內容,最好自己親自去看看源碼。
Android-Universal-Image-Loader: Android Universal Image Loader 源碼分析
Picasso: http://blog.happyhls.me/category/android/picasso/
http://skykai521.github.io/2016/02/25/Picasso%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90/
Glide: Android Glide源碼解析
Fresco: Fresco-Source-Analysis
目前Glide和Fresco都支持gif。對於gif,Fresco的處理跟我們對gif的理解是一致的,先將gif的所有幀解碼出來,然後使用動畫一幀一幀地放。具體是通過變化Drawable的繪制,每次繪制的時候,繪制對應的一幀:
private boolean renderFrame(
Canvas canvas,
int frameNumber,
int frameMonotonicNumber) {
CloseableReference bitmapReference =
mAnimatedDrawableBackend.getBitmapForFrame(frameNumber);
if (bitmapReference != null) {
canvas.drawBitmap(bitmapReference.get(), 0f, 0f, mPaint);
if (mLastDrawnFrame != null) {
mLastDrawnFrame.close();
}
if (mIsRunning && frameMonotonicNumber > mLastDrawnFrameMonotonicNumber) {
int droppedFrames = frameMonotonicNumber - mLastDrawnFrameMonotonicNumber - 1;
mAnimatedDrawableDiagnostics.incrementDrawnFrames(1);
mAnimatedDrawableDiagnostics.incrementDroppedFrames(droppedFrames);
if (droppedFrames > 0) {
FLog.v(TAG, "(%s) Dropped %d frames", mLogId, droppedFrames);
}
}
mLastDrawnFrame = bitmapReference;
mLastDrawnFrameNumber = frameNumber;
mLastDrawnFrameMonotonicNumber = frameMonotonicNumber;
FLog.v(TAG, "(%s) Drew frame %d", mLogId, frameNumber);
return true;
}
return false;
}
WebP是google推出的一種新的影像形式,他可以對圖片進行有效地壓縮又不影響圖片的兼容性和實際清晰度,提高圖片下載速度,在相同質量它壓縮後的體積大概是jpg的40%。但是編碼時間大概比jpg的長8倍。目前Facebook跟QQ空間都有使用WebP圖片。
這個是Fresco提供的功能,目前只支持jpg網絡圖片。可以在下圖片的時候,讓圖片逐漸地由模糊變清晰漸漸地顯示出來。jpeg格式的圖片有兩種方式,一種是直接編碼的,另外一種是漸進式編碼的,能夠用於Fresco漸進加載的是要通過漸進式編碼的jpeg圖片。壓縮標准。
開源地址:https://github.com/SimonVT/android-menudrawer 簡介:menudrawer是跟sliderMenu差不多的一種框架,
場景:1. 突然接到Android的開發任務時如何配置android開發環境?2. 現在的android studio是基於idea的,在我的電腦上運行奇慢和卡(雙核i5
Android中所有控件都繼承自android.view.View,其中android.view.ViewGroup是View的一個重要子類,絕大部分的布局都繼承自Vie
一直使用Eclipse環境開發Android,也嘗鮮使用過Android Studio去開發,各種IDE配合Android SDK及SDK原生的Android Emula