原创 在發佈正式版本前移除日誌語句

移除日誌對於保持Logcat輸出的清晰整潔是很重要的。另外,在代碼中留下過多日誌也會暴露一些開發者不想泄漏的敏感信息。 我認爲,移除日誌的最佳方法是使用ProGuard工具。ProGuard可以移除無用代碼,或者使用語義模糊的名稱

原创 Android Scroll分析(三)——ViewDragHelper

Google在其support庫中爲我們提供了DrawerLayout和SlidingPaneLayout兩個佈局來幫助我們實現側邊欄滑動的效果。在這兩個功能強大的佈局後面,有一個鮮爲人知卻功能強大的類——ViewDragHelp

原创 ListView的選擇模式

在這個demo裏,我們會掌握如何使用ListView創建一個國家選擇器。該選擇器的運行效果如下圖所示。當選擇了一個國家時,點擊“Pick Country”按鈕,就會在Toast中顯示出國家名。 ListView定義了choice

原创 Android控件架構與自定義控件詳解(二)——自定義View

在自定義View時,我們通常會去重寫onDraw()方法來繪製View的顯示內容。如果該View還需要使用wrap_content屬性,那麼還必須重寫onMeasure()方法。另外,通過自定義attrs屬性,還可以設置新的屬性配

原创 Android控件架構與自定義控件詳解(一)——Android控件架構與View的繪製原理

Android控件架構 在Android中,控件大致被分爲兩類,即ViewGroup控件與View控件。ViewGroup控件作爲父控件可以包含多個View控件,並管理其包含的View控件。通過ViewGroup,整個界面上的控件

原创 Android繪圖機制與處理技巧(五)——View的孿生兄弟SurfaceView

SurfaceView與View的區別 View通過刷新來重繪視圖,Android系統通過發出VSYNC信號來進行屏幕的重繪,刷新的間隔時間爲16ms。如果在16ms內View完成了所需要執行的所有操作,那麼在用戶的視覺上,就不會

原创 使用Hierarchy Viewer工具移除不必要的視圖

Hierarchy Viewer工具可以用來查看視圖樹(View Tree)並分析視圖樹中各個視圖在測量、佈局、繪製階段所消耗的時間。通過該工具提供的信息,開發者可以找出視圖樹中那些不必要的視圖以及性能瓶頸。在這個demo中,我們

原创 Android開發模式:模型—視圖—主導器模式

我們有可能使用過MVC(Model—View—Controller)模式,但當我們用更優的方法測試Android代碼時,使用MVP(模型—視圖—主導器:Model—View—Presenter)模式可能更合適。MVP模式與MVC模

原创 爲ListView添加分段標頭

在該Demo中,有一個分段標頭(section header)隨列表滾動,當前分段標頭一直顯示在屏幕頂端。在下圖中,突出顯示的字母就是分段標頭,其下方的列表項顯示首字母與分段標頭相同的國家。 Android開發者通常需要創建兩種

原创 使用Gallery創建嚮導表單

當需要用戶填充一個較長的表單時,開發者或許會找不到頭緒。在接下來的這個例子中,我們會使用Gallery控件創建一個具有多個表單項的用戶註冊表單。最終效果如下圖所示。 要實現上述的嚮導表單,需要創建一個命名爲CreateAccou

原创 使用Activity和Delegate與適配器交互

在這個Demo裏,我們會分析如何通過委託模式(Delegation Pattern)幫助開發者把所有的業務邏輯從適配器中移到Activity中。我們創建一個簡單的應用程序,通過該應用程序可以向列表中添加電話號碼,列表中每一行都有一

原创 使用Android庫項目時適用的架構模式

在Android庫項目(Library Project)發佈之前,在不同Android項目間共享代碼是很困難甚至是不可能的。通常使用JAR包共享Java代碼,但是卻無法共享那些需要引用資源文件的代碼。共享Activity或者自定義

原创 Android繪圖機制與處理技巧(二)——Android圖像處理之色彩特效處理

Android對於圖片處理,最常使用到的數據結構是位圖——Bitmap,它包含了一張圖片所有的數據。整個圖片都是由點陣和顏色值組成的,所謂點陣就是一個包含像素的矩陣,每一個元素對應着圖片的一個像素。而顏色值——ARGB,分別對應透

原创 Android繪圖機制與處理技巧(三)——Android圖像處理之圖形特效處理

Android變形矩陣——Matrix 對於圖像的圖形變換,Android系統是通過矩陣來進行處理的,每個像素點都表達了其座標的X、Y信息。Android的圖形變換矩陣是一個3x3的矩陣,如下圖所示: ⎡⎣⎢adgbehcfi⎤

原创 Android控件架構與自定義控件詳解(三)——自定義ViewGroup

ViewGroup存在的目的就是爲了對其子View進行管理,爲其子View添加顯示、響應的規則。因此,自定義ViewGroup通常需要重寫onMeasure()方法來對子View進行測量,重寫onLayout()方法來確定子Vie