教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Android培訓(xùn)之自定義View那些事

更新時間:2016年07月23日15時22分 來源:Android培訓(xùn)學(xué)員 瀏覽次數(shù):

分析

當我們說要自定義一個View時,其實你是在想自定義這個View的這些方面:
  1. 你想自定義這個View上顯示的內(nèi)容
  2. 你想自定義這個View中子View的擺放位置
  3. 你想讓這個View跟隨手指的移動進行某些變化
 
所以,我們就從這4個方面來學(xué)習(xí)如何自定義效果。
 

實踐

如何自定義View顯示的內(nèi)容

首先,你要知道想自定義View應(yīng)該去繼承自誰,到底是View還是ViewGroup;如果你只是想自定義單個View的內(nèi)容,那么應(yīng)該繼承自View;如果你想自定義一個布局的顯示內(nèi)容,那么應(yīng)該繼承ViewGroup。
現(xiàn)在我們設(shè)定需求,要做一個顯示一個紅色圓形的View,那么你要繼承View,重寫onDraw方法,因為onDraw方法就是允許自定義顯示內(nèi)容的方法。我們在里面繪制一個圓,代碼如下:

效果圖如下:

下面呢,我們在設(shè)一個復(fù)雜點的需求,要求自定義一個顯示一個紅色對勾的View,這時候要繪制對勾,需要借助Path類來勾勒。代碼如下:

效果圖如下:

Ok,以上這些就是如何自定義View內(nèi)容的技巧,當然如果你想繪制更加復(fù)雜的效果,那就要仔細學(xué)習(xí)一下Canvas和Path的api了。
 

如何自定義View中子View的位置

此處由于你要自定義的View中是包含子View的,那么你應(yīng)該繼承ViewGroup,并且通常情況下,我們?yōu)榱耸∪崿F(xiàn)onMeasure方法,那么就可以繼承系統(tǒng)提供的某個布局,如FrameLayout。自定義子View的位置,那么需要重寫onLayout方法了,該方法是允許你隨意指定子View位置的。
現(xiàn)在我們設(shè)定需求,要求實現(xiàn)一個ViewGroup,它的子View是從右往左邊排列的。代碼如下:

效果圖如下:

總結(jié),通過layout的方法來控制View的位置,這個屬于比較簡單的。
 

如何讓View隨手指移動進行變化

要實現(xiàn)這個,那么你需要完成2個點:
  1. 監(jiān)聽手指移動的距離
  2. 讓View進行一些變化
 
對于第一點,監(jiān)聽手指移動的距離,這個很簡單,可以重寫onTouch方法,獲取手指移動距離,也可以借助ViewDragHelper所封裝的方法來監(jiān)聽手指的移動。對于通過onTouch方法來獲取手指移動距離的代碼略過,下面展示一下通過ViewDragHelper來獲取手指距離的代碼,你需要熟悉一下ViewDragHelper的用法才能看懂下面的代碼,clampViewPositionHorizontal方法的dx參數(shù)就是手指移動的距離,代碼如下:

所以,獲取手指移動距離很簡單,我們主要把精力放在讓View進行一些變化上。
這些變化一般是的是縮放,平移,透明,旋轉(zhuǎn)的變化,這些變化Android都為我們提供了對應(yīng)的操作View屬性的方法,代碼如下:

當然如果你需要讓View執(zhí)行某些動畫效果,那么你要借助屬性動畫了,如果你想自定義動畫效果,那么就需要使用ValueAnimator,或者繼承Animaton類實現(xiàn)自定義動畫。
 

總結(jié)

以上總結(jié)了我們自定義View中最常用的情景,當然還有其他很多情況。不過我們可以在這3種基礎(chǔ)上舉一反三。遇到復(fù)雜的效果,就分離模塊,一點一點實現(xiàn),自定義View也就那么點事。

 本文版權(quán)歸傳智播客Android培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Android培訓(xùn)學(xué)院
首發(fā):http://oisangadgets.com/Android
0 分享到:
和我們在線交談!