1. 程式人生 > >Android圖譜(個人記錄)

Android圖譜(個人記錄)

最近想搞一個圖譜app出來,主要記錄各個知識點,流行的框架的使用,這篇文章也是為了以做筆記形式寫的

暫時打算分為下面幾個部分:


四大元件

UI

Net

DynamicLoad

Cache

Database

Framework

JNI

AIDL

優秀輪子

待補充


下面開始細分


四大元件

Activity

Service

Content Provider

BroadCast Receiver

UI

ImageView

BitmapConfig類:可以解碼圖片,將resource解碼成bitmap物件
AlPHA_8 ARGB_4444(過時,棄用) ARGB_8888(有透明度) size幾乎是RGB_565的兩倍 RGB_565(無透明度) BitmapCompressFormate:定義bitmap以檔案儲存的壓縮格式 PNG(無失真壓縮,有透明度) JPEG(有失真壓縮,無透明度) WEBP(有損,谷歌推薦代替JPEG的,壓縮率為它的三分之二,主要用於網路等) Bitmap 構造方法是被native層呼叫的,只能通過Bitmapfactory的decodeXXXX方法獲得一個bitmap物件
大圖載入
下面是對較大圖片進行載入的通用做法,先獲取到image的size大小,通過,injustdecodebounds來只獲取邊界大小資訊 再decodefile,獲得options引數 最後獲得到的width和height來進行圖片的 縮放 (注意:由於解析載入本地圖片時間不確定,特別時間比較多時候,容易造成ANR,建議開執行緒處理)
public static Bitmap decodeSampledBitmapFromFile(String filename,  
            int reqWidth, int reqHeight) {  
  
        // First decode with inJustDecodeBounds=true to check dimensions  
        final BitmapFactory.Options options = new BitmapFactory.Options();  
        options.inJustDecodeBounds = true;  
        BitmapFactory.decodeFile(filename, options);  
  
        // Calculate inSampleSize  
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);  
  
        // Decode bitmap with inSampleSize set  
        options.inJustDecodeBounds = false;  
        return BitmapFactory.decodeFile(filename, options);  
    } 
BitmapRegionDecoder 載入巨型圖片,還要保證他的size的話,可以使用谷歌提供的類 使用也是非常的簡單,獲取到圖片流或者location,定義要顯示的區域位置 如下
        mImageView = (ImageView) findViewById(R.id.id_imageview);  
        try  
        {  
            InputStream inputStream = getAssets().open("tangyan.jpg");  
  
            //獲得圖片的寬、高  
            BitmapFactory.Options tmpOptions = new BitmapFactory.Options();  
            tmpOptions.inJustDecodeBounds = true;  
            BitmapFactory.decodeStream(inputStream, null, tmpOptions);  
            int width = tmpOptions.outWidth;  
            int height = tmpOptions.outHeight;  
  
            //設定顯示圖片的中心區域  
            BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(inputStream, false);  
            BitmapFactory.Options options = new BitmapFactory.Options();  
            options.inPreferredConfig = Bitmap.Config.RGB_565;  
            Bitmap bitmap = bitmapRegionDecoder.decodeRegion(new Rect(width / 2 - 100, height / 2 - 100, width / 2 + 100, height / 2 + 100), options);  
            mImageView.setImageBitmap(bitmap);  
  
  
        } catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
具體特大圖,需要做的滑動檢視其它區域,可以參考這篇博文: http://blog.csdn.net/zuo8787/article/details/51406986
放大縮小等各種手勢

說之前大家要明白單點與多點的區別:

單手指操作:ACTION_DOWN---ACTION_MOVE----ACTION_UP

多手指操作:ACTION_DOWN---ACTION_POINTER_DOWN---ACTION_MOVE--ACTION_POINTER_UP---ACTION_UP.

這種手勢縮放操作,一般就是監聽到手勢變化值,在對應重新整理圖片,具體操作可以參考下面兩篇博文:

http://blog.csdn.net/lmj623565791/article/details/39474553

http://blog.csdn.net/jj120522/article/details/8467810

常用輪子 推薦幾款好用的輪子: UniversalmageLoader(不推薦) https://github.com/nostra13/Android-Universal-Image-Loader 優點:部分解決OOM和listview圖片錯亂,記憶體快取,磁碟快取,使用 Lru演算法進行快取 缺點:停止維護,不推薦使用 Picassohttps://github.com/square/picasso 優點:方便,一句話搞定 Picasso.with(this).load("url").placeholder(R.mipmap.ic_default).into(imageView); 快取使用的也是LRU演算法,執行緒池對於2/3/4g網路有了不通的表現和優化 缺點:Picasso框架沒有實現磁碟快取,配合OkHttp進行實現。 Glidehttps://github.com/bumptech/glide 優點:基於Piscasso,優點他都有,還進行了大量優化,比如,圖片使用的是RGB_565,而Piscasso使用的 ARGB_8888 格式,這個記憶體開銷要小一半。 磁碟快取優化:Picasso 只會快取原始尺寸的圖片,而 Glide 快取的是多種規格,也就意味著 Glide 會根據你 ImageView 的大小來快取相應大小的 圖片尺寸,比如你 ImageView 大小是200*200,原圖是 400*400 ,而使用 Glide 就會快取 200*200 規格的圖,而 Picasso 只會快取 400*400 規格的。 支援gif圖片 缺點:包較大,500k,Piscasso只有100k

Fresco:https://github.com/facebook/fresco 優點:OOM優化非常好,從native層優化的,缺點:包較大,除非是專業圖片app,否則推薦glide或者Piscasso

ListView

ListView RecyclerView 優化

自定義View

繪製view 繪製text

SurfaceView

動畫

幀動畫 補間動畫 屬性動畫

dialog

Fragment

Material Design

Webview



Net

http請求

訊息推送,長連線

圖片下載優化

音訊視訊流

App更新



DynamicLoad

熱更

DynamicLoadAPK

VirtualAPK

DroidPlugin



Cache

圖片快取

其他快取



Framework

攔截器框架

動態代理框架

路由框架



JNI



AIDL



優秀輪子

Lottie

GreenDao

未完待續