天天看點

Android 自定義ViewGroup

 前面幾節,我們重點讨論了自定義View的三闆斧,這節我們來讨論自定義ViewGroup,為什麼要自定義ViewGroup,其實就是為了更好的管理View。

  自定義ViewGroup無非那麼幾步:

  Ⅰ、重寫OnMeasure()方法,測試子控件的大小。

  Ⅱ、重寫onLayout()方法,計算子控件的布局。

  Ⅲ、在onDraw()方法中,繪制子控件,可有可無。

  Ⅳ、監聽onTouch事件,響應螢幕觸摸事件。

  相應思維導圖如下所示:

Android 自定義ViewGroup

  連篇累牍的說了這麼多,我們通過一個小案例來了解這個自定義ViewGroup把,看看如何實作ViewGroup。

    簡單的黏性ScrollView

  簡單概述

  這是一個原生scrollView效果非常類似的效果,他可以像scrollView一樣上下滑動的效果,不過我們增加了一個黏性效果。何為黏性效果了?即當一個子View向上滑動大于一定距離的時候,它将自動向上滑動,顯示下一個子View。同理,如果一個子View滑動距離小于某一個距離,它将滾回到原始的位置。

  實作思路

  投籃要找角度,控件要找思路。我們來分析要實作此自定義ViewGroup的基本思路了:

  Ⅰ、在OnMeasure()方法中,對每個子控件的大小進行測量了。

  Ⅱ、在OnLayout()方法中,對每個要顯示控件的位置進行計算。

  Ⅲ、緊接着,就是在OnTouchEvent()方法,監聽着手勢觸摸事件,判斷它是上滑還是下滑,判斷它的滑動距離是否大于我們設定的值,如果大于這個值,就将它移動到下一個子View,否則,滾回到原來的位置。

  有了這樣的思路之後,我們隻需要所做的是按部就班實作代碼編寫

  具體實作

  第一步、進行一些變量的初始化,代碼如下:

 擷取螢幕高度作為每個控件的高度,将scroller控件進行初始化。

   第二步 、實作控件的測量,代碼如下:

 我們看到每個子控件的大小與父控件的大小保持一緻,這樣才能形成滾動的效果。

  第三步、将子控件從上到下依次排列開來,代碼如下所示:

 我們可以清晰的看到,如果将其子控件進行從上到下依次排列,這個子控件占一頻,這樣,才能形成可以上下滾動的必要條件。

  第四步、監聽手勢事件,源代碼如下:

 事後總結

  其實,在這個事件監聽中就做了三件事件

  ①、根據手勢按下、擡起的距離進行判斷,判斷手勢到底是上滑還是下滑。

  ②、如果手勢滑動的距離,小于小于相應的門檻值(這裡為螢幕高度的三分之一)以後,就滾回到原來的位置,否則自動滑入下一個子View。

  ③、在手指移動事件,使這個控件能夠随着手勢的滑動而自由的移動。但是,我們要做好相應臨界值判斷,判斷其是否小于0或者大于螢幕高度,就不進行滑動。

  最終效果 

  這個控件最終運作的效果為:

Android 自定義ViewGroup

   這就是,我對自定義viewGroup控件的一定總結。本人才疏學淺,懇請大家指教。

繼續閱讀