自定義slideview(轉)
Android控制元件View打造完美的自定義側滑選單
這篇文章主要介紹了Android控制元件View打造完美的自定義側滑選單的相關資料,具有一定的參考價值,感興趣的小夥伴們可以參考一下
一、概述
在App中,經常會出現側滑選單,側滑滑出View等效果,雖然說Android有很多第三方開源庫,但是實際上咱們可以自己也寫一個自定義的側滑View控制元件,其實不難,主要涉及到以下幾個要點:
1.對Android中Window類中的DecorView有所瞭解
2.對Scroller類實現平滑移動效果
3.自定義ViewGroup的實現
首先來看看效果圖吧:
下面現在就來說說這裡咱們實現側滑View的基本思路吧,這裡我採用的是自定義一個繼承於RelativeLayout的控制元件叫做XCSlideView類吧。
首先從佈局檔案中inflater出來一個menuView,然後通過addView的方法,將該側滑View新增到自定義的控制元件View中怎麼讓XCSlideView 這個側滑View 隱藏到螢幕之外呢?很簡單通過ScrollTo方法,移動一個螢幕寬度的距離即可,這裡以左側滑出為例吧,只需要這樣 XCSlideView.this.scrollTo(mScreenWidth, 0);mScreenWidth是螢幕寬度。下面還要處理的就是底下的半透明黑色的蒙層效果,這個其實就是一個View,然後設定半透明效果。這個當然簡單了,關鍵是咱們讓他顯示在咱們的自定義側滑View的下面呢,這裡咱們先給出DecorView的簡單分析,方便下面介紹新增半透明View蒙層下:
下面是對上面這張圖的解釋:
1、DecorView為整個Window介面的最頂層View。
2、DecorView只有一個子元素為LinearLayout。代表整個Window介面,包含通知欄,標題欄,內容顯示欄三塊區域。
3、LinearLayout裡有兩個FrameLayout子元素。
(20)為標題欄顯示介面。只有一個TextView顯示應用的名稱。也可以自定義標題欄,載入後的自定義標題欄View將加入FrameLayout中。
(21)為內容欄顯示介面。就是setContentView()方法載入的佈局介面,加入其中。
有了上面的DecorVIew知識背景,現在就來說說 怎麼新增蒙層View和將自定義側滑View新增到Activity的DecorView中,首先把蒙層View新增到
(31)customView中去,然後將自定義側滑View新增到 (21)FrameLayout中去,至於為什麼要這樣,是因為考慮到自定義側滑View不一定是寬度為螢幕寬度,所以才這麼做,而且也方面處理有無標題欄,有無採用沉浸式狀態列設計等情況。
二、自定義側滑View的實現
根據上面的概述,大家應該知道大概的思路了,下面我就給出自定義側滑View類的核心程式碼:
1、自定義側滑View用到的變數:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
2、初始化建立自定義側滑View:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
3、建立半透明蒙層View,並新增到contentView中去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
4、設定側滑選單View,並新增到DectorView->LinearLayout->內容顯示區域View(FrameLayout)中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|
5、處理自定義側滑View的側滑滑動和隱藏效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
|
三、如何使用該自定義側滑View控制元件
使用起來,比較簡單,通過create方法建立一個側滑VIew,然後通過setMenuView方法設定一個側滑View進去,有需要設定寬度的話, 通過setMenuWidth方法來設定即可,最後用show()方法滑出來就可以啦,使用起來是不是很方便?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|