Android 開源項目源碼解析(第二期)

Android 開源項目源碼解析(第二期)

 

 

android-Ultra-Pull-To-Refresh 源碼解析

一個強大的 Andriod 下拉刷新框架。主要特色:(1) 繼承於 ViewGroup,Content 不只能夠是經常使用的 ListView、GridView,還能夠是其餘任何 View。(2) 簡潔完善的 Header 抽象,方便進行拓展,構建符合需求的頭部。UltraPTR 整體設計比較簡單清晰,首先抽象出了兩個接口,功能接口和 UI 接口。PtrHandler 表明下拉刷新的功能接口,包含刷新功能回調方法以及判斷是否能夠下拉的方法。用戶實現此接口來進行數據刷新工做。android

DynamicLoadApk 源碼解析

DynamicLoadApk 是一個開源的 Android 插件化框架。插件化的優勢包括:(1) 模塊解耦,(2) 動態升級,(3) 高效並行開發(編譯速度更快) (4) 按需加載,內存佔用更低等等。原理是 DexClassLoader 加 Activity 代理,即在容器中註冊幾個代理的 Activity,啓動插件的 Activity 時實際啓動的都是代理的 Activity,從而解決 Activity 必須註冊的問題。數據庫

NineOldAnimations 源碼解析

NineOldAndroids 是一款支持在低版本(API 11 如下)使用 Android 屬性動畫以及 3D 旋轉動畫的框架,它提供了一系列如 ViewAnimator, ObjectAnimator, ViewPropertyAnimator 等 API 來完成這些動畫,解決了 Android 動畫框架在低版本的兼容性問題。在 API 11 (Honeycomb-Android 3.0)後 Android 推出了屬性動畫、X 軸翻轉等動畫效果,可是這些效果卻不能運行在 API 11 如下,NineOldAndroids 的出現使得這些動畫效果可以兼容低版本系統,保證動畫在各個系統版本可以完美運行。緩存

SlidingMenu 源碼解析

SlidingMenu 是一個強大的側邊欄菜單,經過拖動屏幕邊緣滑出菜單,支持屏幕左右劃出,支持菜單 Zoom、Scale、Slide Up 三種動畫樣式出現。主要特色以下:(1) 側邊欄能夠是一個 Fragment,包含任何 View;(2) 使用簡單方便,支持左滑和右滑等;(3) 自定義側邊欄顯示動畫。服務器

Cling 源碼解析

Cling 類庫是由 Java 實現的 DLNA/UPnP 協議棧。基於 DLNA/UPnP 能夠開發出相似多屏互動、資源共享、遠程控制等功能的應用,經過 Android 應用管理一個或多個設備,將音頻、視頻、圖片推送到指定設備顯示。UPnP 的工做過程大概分爲 6 個步驟:尋址(Addressing)、發現(Discovery)、描述(Description)、控制(Control)、事件 (Eventing)、展示(Presentation)。網絡

BaseAdapterHelper 源碼分析

base-adapter-helper 是對傳統的 BaseAdapter ViewHolder 模式的一個封裝。主要功能就是簡化咱們書寫 AbsListView 的 Adapter 的代碼,如 ListView,GridView。優勢 (1) 提供 QucikAdapter,省去相似 getCount() 等抽象函數的書寫,只需關注 Model 到 View 的顯示。(2) BaseAdapterHelper 中封裝了大量用於爲 View 操做的輔助方法。框架

Side Menu.Android 源碼解析

Yalantis 開源動畫體驗很棒的 Side Menu,菜單打開爲翻頁效果。異步

DiscreteSeekBar 源碼解析

DiscreteSeekBar 實現了相似 Material Design 風格的 SeekBar。DiscreteSeekBar 能夠在 2.1 以上的應用中使用,能夠在 XML 中配置顯示的格式,也能夠在代碼中自定義顯示的數字或者指定顯示字符。使用方法相似 SeekBar,很簡單。ide

CalendarListView 源碼解析

CalendarListview 是一個能夠方便從日曆中選擇日期的控件,支持到 API 10 以上,只須要在你的佈局中添加 DayPickerView 便可。使用控件 RecycleView 實現的日期選擇器,能夠選擇時間段。函數

PagerSlidingTabStrip 源碼解析

PagerSlidingTabStrip 是配合 ViewPager 使用的 Indicator,支持 ViewPager Scroll 時 Indicator 聯動。PagerSlidingTabStrip 實現聯動效果的原理是調用 ViewPager 的 OnPageChangeListener。 可是 Viewpager 註冊的 Listener 不是自身的 OnPageChangeListener,而是 PagerSlidingTabStrip 內部類 PageListener。 經過 PageListener 實現對 ViewPager 和 Tab 的封裝。從而實現滑動聯動效果。

公共技術點之 Android 動畫基礎

簡單的介紹了 View 和 Property 動畫的概念,如何在項目中建立資源文件,以及如何在代碼中使用它們。

公共技術點之 Java 反射 Reflection

介紹了Java 反射,如何經過反射獲取類、屬性、方法、父類、接口、註解等等。

Volley 源碼解析

Volley 是 Google 在 2013 I/O 大會上推出的 Android 異步網絡請求框架和圖片加載框架。特別適合數據量小,通訊頻繁的網絡操做。Volley 主要是經過兩種 Diapatch Thread 不斷從 RequestQueue 中取出請求,根據是否已緩存調用 Cache 或 Network 這兩類數據獲取接口之一,從內存緩存或是服務器取得請求的數據,而後交由 ResponseDelivery 去作結果分發及回調處理。

Android Universal Image Loader 源碼分析

Universal Image Loader 是一個強大的、可高度定製的圖片緩存。整個庫分爲 ImageLoaderEngine,Cache及 ImageDownloader,ImageDecoder,BitmapDisplayer,BitmapProcessor 五大模塊,其中 Cache 分爲 MemoryCache 和 DiskCache 兩部分。簡單的講就是 ImageLoader 收到加載及顯示圖片的任務,並將它交給 ImageLoaderEngine,ImageLoaderEngine 分發任務到具體線程池去執行,任務經過 Cache 及 ImageDownloader 獲取圖片,中間可能通過 BitmapProcessor 和 ImageDecoder 處理,最終轉換爲 Bitmap 交給 BitmapDisplayer 在 ImageAware 中顯示。

Dagger 源碼解析

Dagger 是一款 Java 平臺的依賴注入庫。Java 的依賴注入庫中,最有名的應該屬 Google 的 Guice,Spring 也頗有名,不過是專一於 J2EE 開發。Guice 的功能很是強大,但它是經過在運行時讀取註解來實現依賴注入的,依賴的生成和注入須要依靠 Java 的反射機制,這對於對性能很是敏感的 Android 來講是一個硬傷。基於此,Dagger 應運而生。Dagger 一樣使用註解來實現依賴注入,但它利用 APT(Annotation Process Tool) 在編譯時生成輔助類,這些類繼承特定父類或實現特定接口,程序在運行時 Dagger 加載這些輔助類,調用相應接口完成依賴生成和注入。Dagger 對於程序的性能影響很是小,所以更加適用於 Android 應用的開發。

EventBus 源碼解析

EventBus 是一個 Android 事件發佈/訂閱框架,經過解耦發佈者和訂閱者簡化 Android 事件傳遞,這裏的事件能夠理解爲消息,本文中統一稱爲事件。事件傳遞既可用於 Android 四大組件間通信,也能夠用戶異步線程和主線程間通信等等。傳統的事件傳遞方式包括:Handler、BroadCastReceiver、 Interface 回調,相比之下 EventBus 的優勢是代碼簡潔,使用簡單,並將事件發佈和訂閱充分解耦。

xUtils 源碼解析

xUtils一個 Android 公共庫,主要包括 View,DB, Http, Bitmap 四個模塊。View 模塊主要的功能是經過註解綁定 UI,資源,事件。DB 模塊是一個數據庫 ORM 框架, 簡單的語句就能進行數據的操做。Http 模塊主要訪問網絡,支持同步,異步方式的請求,支持文件的下載。Bitmap 模塊是加載圖片以及圖片的處理, 支持加載本地,網絡圖片,並且支持圖片的內存和本地緩存。

ViewPagerindicator 源碼解析

ViewPagerIndicator 經常使用語 ViewPager 的界面導航。主要特色:使用簡單、樣式全、易擴展。該項目整體設計很是簡單,一個 PageIndicator 接口類,具體樣式的導航類實現該接口,而後根據具體樣式去實現相應的邏輯。 IcsLinearLayout:LinearLayout 的擴展,支持了 4.0 以上的 divider 特性。 CirclePageIndicator、LinePageIndicator、UnderlinePageIndicator、 TitlePagerIndicator 繼承自 View。TabPageIndicator、IconPageIndicator 繼承自 HorizontalScrollView。

HoloGraphLibrary 源碼解析

HoloGraphLibrary 是一個可用於繪製圖表的項目,支持繪製線狀圖、柱狀圖、餅狀圖。圖形設計友好,使用方便。不過庫自己代碼通常,建議吸取原理重構而不要直接使用。

CircularFloatingActionMenu 源碼解析

CircularFloatingActionMenu 是一個與著名應用 Path 菜單相似的(非完整)圓形彈出菜單。可方便的定製菜單以及動畫。支持自定義動畫、菜單、角度範圍、半徑等。源碼主要分紅兩部分,一部分是構成菜單的 View 部分,另外一部分是動畫的操做類。

PhotoView 源碼解析

PhotoView 是支持雙擊或雙指縮放的 ImageView。支持 Pinch 手勢自由縮放,支持雙擊放大/還原,支持平滑滾動,在滑動父控件下可以運行良好,支持基於 Matrix 變化(放大/縮小/移動)的事件監聽。PhotoView 這個庫實際上比較簡單,關鍵點其實就是 Touch 事件處理和 Matrix 圖形變換的應用。

Android Lock Pattern 源碼解析

Lock Pattern 是 Android 的圖案密碼解鎖庫,經過手勢鏈接 3 * 3 的點矩陣繪製圖案表示解鎖密碼。支持 ACTION_CREATE_PATTERN、ACTION_COMPARE_PATTERN、ACTION_VERIFY_CAPTCHA 三種 Action 操做模式。

公共技術點之 Java 動態代理

在某些狀況下,咱們不但願或是不能直接訪問對象 A,而是經過訪問一箇中介對象 B,由 B 去訪問 A 達成目的,這種方式咱們就稱爲代理。這裏對象 A 所屬類咱們稱爲委託類,也稱爲被代理類,對象 B 所屬類稱爲代理類。根據程序運行前代理類是否已經存在,能夠將代理分爲靜態代理和動態代理。

公共技術點之 Java 註解 Annotation

註解指可以添加到 Java 源代碼的語法元數據。類、方法、變量、參數、包均可以被註解,可用來將信息元數據與程序元素進行關聯。Annotation 中文常譯爲「註解」,註解的主要做用包括 a. 標記,用於告訴編譯器一些信息。b. 編譯時動態處理,如動態生成代碼。c. 運行時動態處理,如獲得註解信息。

公共技術點之 View 繪製流程

當 Activity 接收到焦點的時候,它會被請求繪製佈局,該請求由 Android framework 處理.繪製是從根節點開始,對佈局樹進行 measure 和 draw 。整個 View 樹的繪圖流程在 ViewRoot.java類的performTraversals() 函數展開,該函數所作的工做可簡單概況爲是否須要從新計算視圖大小(measure)、是否須要從新安置視圖的位置(layout)、以及是否須要重繪 (draw)。

公共技術點之依賴注入

若是在 Class A 中,有 Class B 的實例,則稱 Class A 對 Class B 有一個依賴。非本身主動初始化依賴,而經過外部來傳入依賴的方式,咱們就稱爲依賴注入。簡單的說依賴注入主要有兩個好處:(1). 解耦,將依賴之間解耦。(2). 由於已經解耦,因此方便作單元測試,尤爲是 Mock 測試。

公共技術點之 View 事件傳遞

全部 Touch 事件都被封裝成了 MotionEvent 對象,包括 Touch 的位置、時間、歷史記錄以及第幾個手指(多指觸摸)等。事件類型分爲 ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_CANCEL,每一個事件都是以 ACTION_DOWN 開始,ACTION_UP 結束。對事件的處理包括三類,分別爲傳遞——dispatchTouchEvent() 函數、攔截——onInterceptTouchEvent() 函數、消費——onTouchEvent() 函數和 OnTouchListener。

相關文章
相關標籤/搜索