Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 《Android 群英傳》 閱讀筆記 第四章~第六章

《Android 群英傳》 閱讀筆記 第四章~第六章

編輯:關於Android編程

第四章 ListView使用技巧 4.1 ListView常用優化技巧 4.1.1 使用ViewHolder模式提高效率   4.1.2 設置項目間分隔線 android:divider="android:color/darker_gray" android :dividerHeight="10dp"   4.1.3 取消ListView的Item點擊效果 android :listSelector =#00000000   4.1.5 設置listView需要顯示在第幾項 listView.setSelection(N) 實現平移滑動 listview.smoothScrollBy(distance,duration) listview.smoothScrollByOffset(offset) listview.smoothScrollToPosition(index)   4.1.6 動態修改ListView mData.add("new"); mAdapter.notifyDataSetChanged();   4.1.7 遍歷ListView中的所有item for(int i=0;i   }   4.1.8 處理空ListView 當listView列表中無數據時,ListView不會顯示任何數據或提示,按照完善用戶體驗的需求,這裡應該給以無數據的提示。listView提高了一個方法:setEmptyView()。   當用戶沒有做手指拋動的狀態時,這個方法只會回調2次,否則會回調3次,差別就是手指拋動這個狀態。 通常情況下,我們會在這個方法中通過不同的狀態來設置一些標志Flag,來區分不同的滑動狀態,供其他方法處理。   4.2.1 具有彈性的ListView listview中有一個控制滑動到邊緣的處理方法。overScrollBy方法。裡面有一個參數maxOverScrollBy,注釋中寫道,Number of piexls to overscroll by in either direction along the Y axis 。只要修改這個參數的值,就可以讓ListView具有彈性了。   4.2.2 自動顯示、隱藏布局的ListView   4.2.3 聊天ListView   4.2.4 動態改變ListView   第5章 Android Scroll分析   5.1 滑動效果是如何產生的 滑動一個View,本質上來說就是移動一個View。改變其當前所處的位置。 要實現View的滑動,就必須監聽用戶觸摸的事件,並根據事件傳入的坐標,動態且不斷改變View的坐標,從而實現View跟隨用用戶觸摸的滑動而滑動。   5.1.1 Android 坐標系 所謂滑動,正式相對於參考系的運動。在Android中,將屏幕最左上角的定義作為Android坐標系的圓點,從這個點的向右為X軸正方向,從這個點向下是Y軸正方向。 系統提供了getLocationOnScreen(int location[])這樣的方法來獲取Android坐標系中的位置,即該視圖左上角在Android坐標系中的坐標。另外,在觸控事件中使用getRawX(),getRawY()方法所獲得的坐標同樣是Android坐標系中的坐標。   5.1.2 視圖坐標系 視圖坐標系同樣是以原點向後為X軸正方向,以圓點向下為Y軸正方向,只不過在視圖坐標系中,原點不再是Android坐標系中的屏幕最左上角,而是以父視圖左上角為坐標原點。 通過getX(),getY()所獲得坐標就是視圖坐標系中的坐標。   5.1.3 觸控事件——MotionEvent View提供的獲取坐標方法 getTop():獲取到的是View自身的定邊到其父布局頂邊的距離 getLeft():獲取到的是View自身的左邊到其父布局左邊的距離 getRight():獲取到的是View自身的右邊到其父布局左邊的距離 getBottom():獲取的是View自身的底邊到其父布局頂邊的距離   MotionEvent提供的方法 getX():獲取點擊事件距離控件左邊的距離,即視圖坐標。 getY():獲取點擊事件距離控件頂邊的距離,即視圖坐標。   getRawX():獲取點擊事件距離整個屏幕左邊的距離,即絕對坐標。 getRawY():獲取點擊事件距離整個屏幕頂邊的距離,即絕對坐標   5.2實現滑動的七種方法 當觸摸View時,系統記下當前觸摸點坐標;當手指移動時,系統記下移動後的觸摸點坐標。從而獲取到前一次坐標點的偏移量,通過偏移量來修改View的坐標,這樣不斷重復,從而實現滑動過程。   5.2.1 layout方法 在View繪制時,會調用onLayout方法來設置顯示的位置。同樣,可以通過修改View的Left,top,bottom四個屬性來控制View的坐標。 使用絕對坐標系,有一條非常需要注意的地方,就是在每次執行完Action_move的邏輯後,一定要重新設置初始坐標,這樣才能轉卻獲取偏移量。   5.2.2 offleftAndRight()與offsetTopAndBottom() 這個方法相當於系統提供一個對左右、上下移動的API封裝,當計算出偏移量後,只需要使用如下代碼,就可以完成View的重新布局。   5.2.3 LayoutParams LayoutParams保存了一個View的布局參數。因此可以在程序中,通過改變LayoutParams來動態地修改一個布局的位置參數,從而達到改變View位置的效果。我們可以很方便地在程序中使用getLayoutParams()來獲取一個View的LayoutParams。 當然,計算偏移量的方法與在Layout方法中計算offset也是一樣。當獲取到偏移量之後,就可以通過setLayoutParams來改變其LayouParams。   5.2.4 scrollto 與scrollBy scrollTo(x,y)表示移動到一個具體的坐標點(x,y) scrollBy (dx,dy)表示移動的增量為dx,dy。   scrollTo,scrollBy方法移動的是View的content。即讓View的內容移動。 如果在ViewGroup中使用scrollTo,scrollBy方法,那麼移動的將是所有子View。 如果在View中使用,那麼移動的將是View的內容。   手機屏幕是一個中空的蓋板,蓋板下面是一個巨大的畫布,也就是我們想要顯示的視圖。當把這個蓋板蓋在畫布上的某一處時,則被蓋板蓋住了無法看見。我們的視圖與這個例子很相似,我們沒有看見視圖,並不代表它並不存在,有可能只是在屏幕外而已。   5.2.5 Scroller Scroller類就這樣應運而生了,通過Scroller類可以實現平移滑動的效果,而不再是瞬間完成的移動。 使用Scroller類需要三個步驟 1、初始化Scroller 2、重寫computerScroll()方法,實現模擬滑動 系統在繪制View的時候會在Draw()方法中調用該方法   5.2.7 ViewDragHelper   1、初始化ViewDragHelper 它的第一個參數是監聽的View,通常需要一個ViewGroup 第二個參數是一個Callback回調。   2、攔截事件 重寫事件攔截方法,將事件傳遞給ViewDragHelper   3、處理computeScroll() 使用ViewDragHelper同樣需要重寫下computeScroll()方法。因為ViewDragHelper內部也是通過Scroller來實現平滑移動的。   4、處理回調CallBack 重寫了tryCaptureView()方法。通過這個方法,我們可以指定在創建ViewDragHelper時,參數parentView中的哪一個子View可以被移動。   5、下面來看具體的滑動方法 clampViewoPositionVertical()和clampViewPositonHorizontal()。 如果要實現滑動效果,那麼這兩個方法必須要重寫。因為當返回值為0,即不發生滑動。   6、優化這個實例 在ViewDragHelper.Callback中,系統提供了這樣的方法——onViewReleased()。通過重寫這個方法,可以簡單地實現當手指離開屏幕後實現的操作。   7、最後一步 在自定義ViewGroup的onFinishInflate()方法中,按順序將子View分別定義成MenuView和MainView,並在onSizeChanged()方法中獲得View的寬度。   onViewCaptured() 在用戶觸摸到View後回調   onViewDragStateChanged() 這個事件在拖拽狀態改變時回調,比如,idle,dragging等狀態   onViewPositionChanged() 這個事件在位置改變時回調,常用與滑動時改變scale進行縮放等效果。   第6章 Android繪圖機制與處理技巧 Android的繪圖機制應該是Android最核心的內容之一。 1、Android屏幕相關知識 2、Android繪圖技巧 3、Android圖像處理技巧 4、SurfaceView的使用   6.1 屏幕的尺寸信息 6.1.1 屏幕參數 1、屏幕大小 屏幕對角線的長度,通常使用寸來度量,例如。4.7寸手機,5.5寸手機 2、分辨率 分辨率是指屏幕的像素點個數。例如,720x1280就是指屏幕的分辨率,指寬有720個像素點,高有1280個像素點。 3、PPI 每英寸像素,又成為DPI。它是由對角線的像素點除以屏幕的大小得到的。   6.1.2系統屏幕密度 手機固定的DPI     6.1.3獨立像素密度 dp 相同長度的屏幕,高密度的屏幕包含更多的像素點。 Android系統使用mdpi即密度值為160的屏幕作為標准,在這個屏幕上,1px=1dp。 其他屏幕可以通過比例進行換算。 我們也可以得到各個分辨率直接的換算比例: ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12。   6.1.4 單位轉換   6.2 2D繪圖基礎 系統通過提供的canvas對象來提供繪圖方法。它提供了各種繪制圖像的API。 如drawPoint(點),drawLine(線),drawRect(矩形),drawVertices(多邊形),drawArc(弧),drawCircle(圓)。 1、setAntiAlias //設置畫筆的鋸齒效果 2、setColor() 設置畫筆的顏色 3、setARGB() 設置畫筆的A、R、G 、B值 4、setAlpha()設置畫筆的alpha值 5、setTextSize() 設置字體的尺寸 6、setStyle()設置畫筆的風格(空心或實心) 7、setStrokeWidth()設置空心邊框的寬度     需要注意: 繪制弧形和扇形的區分就是倒數第二個參數userCenter的區別。 Paint.Style.STROKE+useCenter(true); Paint.Style.STROKE+useCenter(false);   6.3 Android XML繪圖   6.4.1 Canvas canvas.save() 從字面上可以理解為保存畫布。它的作用就是將之前的所有已繪制圖像保存起來,讓後續的操作就好像在一個新的圖層上操作一樣 canvase.restore(),即合並圖層,將save()之後繪制的所有圖像與save()之前的圖像進行合並。 canvas.translate() 畫布平移, canvas.rotate() 畫布翻轉   119頁 將畫布以圓心為原點旋轉到需要的角度。每當畫好一根線,就旋轉相應的角度。 雖然下一次畫線的時候,依然是第一根線的坐標,但是實際上當我們把畫布重新還原到旋轉錢的位置時,所有的刻度線就已經全部畫好了。 通過旋轉畫布,實際上是旋轉了畫圖的坐標系。   6.4.2 Layer圖層 Android 通過調用saveLayer()方法,saveLayerAlpha()方法將一個圖層入棧,使用restore()方法、restoreToCount()方法將一個圖層出棧。入棧的時候,後面所有的操作都發生在這個圖層上,而出棧的時候,則會把圖像會知道上層canvas上。   6.5 Android 圖像處理之色彩特效處理 Android最長使用到的數據結構是位圖——Bitmap。它包含了一張圖片所有的數據。整個圖片都是由點陣和顏色值組成。所謂點陣就是一個包含像素的矩陣,每一個元素對應著圖片的一個像素。而顏色值——ARGB。   6.5.1 色彩矩陣分析 在色彩處理中,通常使用以下三個角度來描述一個圖像。 1、色調——物體傳播的顏色 2、飽和度——顏色的純度,從0到100%來進行描述 3、亮度——顏色的相對明暗程度。   6.8 surfaceView View 通過刷新來重繪視圖,Android通過發出VSYNC信號來進行屏幕的重繪,刷新的間隔事件為16ms。 SurfaceView與View的區別在於 1、View主要適用於主動更新的情況下,而SurfaceView主要適用於被動更新。例如,頻繁的刷新 2、View在誅仙城中對畫面進行刷新,而SurfaceView通常會通過一個子線程來進行頁面的刷新 3、View在繪圖時沒有使用雙緩沖機制,而SurfaceView在底層實現機制中就已經實現了雙緩沖機制。 總之:如果你的自定義View需要頻繁刷新,或者刷新時數據處理量比較大,那麼就可以考慮用SurfaceView來取代View了。   6.8.2 SurfaceView的使用 1、創建SurfaceView  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved