Android-自定義View集合

學(xué)習(xí)安卓幾個月了,也有點(diǎn)自己的體會,然而我發(fā)現(xiàn)自己真正喜歡的是數(shù)據(jù)方面的東西,當(dāng)然android自定義view也很好玩,很體驗一些技巧性的東西。也不想自己以前學(xué)習(xí)過程總結(jié)的東西就此淹沒,于是我就決定把自己的一些在android研究過的東西全部都分享出來啦。這個是自定義View系列,如果覺得我寫的還行的話,可以在一起討論,我還是可以幫忙寫下一些特別的點(diǎn)的自定義view的。


文章結(jié)構(gòu):1.羅列分享我學(xué)習(xí)過程中寫的自定義view;2.針對個別特殊的自定義view討論下重要的思路部分;3.給出一些自定義view學(xué)習(xí)資源匯總;4.我學(xué)習(xí)自定義view的庫,喜歡的支持的可以給下star或fork啦。


一、羅列分享我學(xué)習(xí)過程中寫的自定義view

如下圖:根據(jù)圖中的去按照我的文章分點(diǎn),以及最后給的源碼結(jié)合來看吧,里面有我學(xué)習(xí)過程中的很多解釋,雖然有的有點(diǎn)啰嗦,但很完整體現(xiàn)了我的思路了。

這里寫圖片描述

這里寫圖片描述

二、針對個別特殊的自定義view討論下重要的思路部分

(1)上面兩個仿美團(tuán)上方欄的效果:

第一個方案的 是xml中用radiobutton強(qiáng)制寫死了大概多少個滑動頁面的引導(dǎo)小圓點(diǎn),這種方案可見復(fù)用性不高。實現(xiàn)步驟是:1.編寫頁面,使用一viewpager和一radiogroup組合做出效果;2.重要的是自定義viewpager的適配器;3.在controller的activity中實現(xiàn)耦合,往viewpager加入gridview,將gridview傳給viewpager的適配器,用radiogroup的基本邏輯實現(xiàn)引導(dǎo)的小圓點(diǎn)UI。
第二種方案是我反編譯了一下美團(tuán),看了下他們的大致布局,以及耦合的代碼,實現(xiàn)的仿造。大致過程還是跟第一個方案相同,不過在小圓點(diǎn)的實現(xiàn),參考它們的多重復(fù)用性方案。就是用一個小圓點(diǎn)數(shù)組,在controller那里實現(xiàn)綁定每個gridview。

(2)自定義Textview的字體,我以前寫過了。Android-自定義TextView(彩色字體與霓虹燈字體以及TextView的多項字體效果)

(3)手動控制圓和圓形進(jìn)度條也寫過啦。 Android-自定義view之圓(選擇程度圓以及進(jìn)度圓)

(4)圓形頭像也是寫過了。 Android-解析自定義view之圓形頭像的各類方案

(5)衛(wèi)星導(dǎo)航欄。是以前項目移植過來的一個東西。很有趣的一個東西。重點(diǎn)是:重寫relativelayout和用viewgroup實現(xiàn)自己的衛(wèi)星布局。過段時間會針對這個寫下文章。

(6)流式布局。鴻洋大大講得很好

(7)水波紋。嘻嘻,這個要求是往下兼容,我用自己思路實現(xiàn)了一個,雖然很多人做項目都是照搬v7包,然后直接往下兼容,可是這種自定義view的會給我們加深認(rèn)識安卓的底層繪圖機(jī)制,繼承機(jī)制的理解呀。

核心是:使用監(jiān)聽事件,利用不斷重繪,并且要不斷地清理畫布的數(shù)據(jù),不然會oom的。那個波紋的效果其實就是不斷地畫圓形,還要計算點(diǎn)擊的點(diǎn),計算半徑,然后傳遞事件給dispatchDraw,不斷重繪。

(8)圖片輪播,這個很多人在開發(fā)的時候也是照搬第三方的庫的,然而并不好,就不多說了。我們來討論下它的核心思路:(具體看源碼有詳細(xì)的思路解釋)

1.自定義viewpager和自定義viewpager的適配器,其中輪播器實現(xiàn)的:輪播器最重要的幾個特點(diǎn)就是:自動滾動、手動滑動、滾動方向、每個Item顯示時間。2.在viewpager中實現(xiàn)的定時輪播,寫個定時器去執(zhí)行他;3.一個線程安全的播放方法,根據(jù)我們設(shè)置的向標(biāo)記量去輪播(向左向右向上向下)。

(9)recyclerview,鴻洋大大的完美解釋。鴻洋大大的recyclerview

有能力的朋友,最好也把鴻洋大大的recyclerview封裝也看了,我在項目中用了,閱讀大大的思路真的真的很棒??!鴻洋大大的recyclerview封裝

(10)接下來就是圓形菜單的,我基于鴻洋大大的一些思路根據(jù)實際需求做了一個限制級的圓形菜單。以前也解析過啦。 Android-自定義view之圓形與“半圓形”菜單


三、給出一些自定義view學(xué)習(xí)資源匯總:

初步接觸自定義看的東西:首先要清楚為什么要自定義view,什么是自定義view啦。給出博客你看:

總的我們要三步驟:一、自定義控件;二、自定義布局;三、深研自定義機(jī)制。

1.基礎(chǔ)一。

2.然后基礎(chǔ)二。

3.了解大概后,接著你就要系統(tǒng)一下看看自定義有多少東西。啟航的系列很詳細(xì)

4.開始實現(xiàn)自己的自定義控件啦:三種自定義方式:擴(kuò)展,組合,重寫

5.自定義布局從LinearLayout談起

6.在這過程中見識各個android大佬的自定義:搜下博客之星,前幾的基本都是android的啦。

7.深入自定義機(jī)制:(從個別方法到事件傳遞機(jī)制)

(1)getWidth和getMeasuredwidth方法:http://blog.csdn.net/u011494050/article/details/39134161

http://blog.sina.com.cn/s/blog_6e519585010152s5.html

(2)LayoutParams:http://blog.csdn.net/liuhaomatou/article/details/22899925
(3)onTouchEvent和OnTouch區(qū)別:http://blog.csdn.net/huiguixian/article/details/22193977
(4)Invalidate和postInvalidate的區(qū)別:http://www.itdecent.cn/p/457d74f443e2
(5)事件傳遞機(jī)制:http://blog.csdn.net/yanzi1225627/article/details/22592831

大致就是這個步驟啦。過程很艱辛,但果實很好吃。


四、給出我學(xué)習(xí)過程的自定義庫咯。

喜歡的給下star或者fork咯,如果有朋友告訴我要寫些特別點(diǎn)的控件,我會盡力寫下,然后繼續(xù)放到那個庫中,給大家一起學(xué)習(xí)。

我的自定義學(xué)習(xí)庫,github地址:輔助的自定義view系列

我會把自己寫的學(xué)習(xí)的總結(jié)的自定義view更新給大家,一起學(xué)習(xí)?。∠矚g的可以star或者fork下咯,也算對我的支持,哈哈,謝謝大家。

好了,Android-自定義View學(xué)習(xí)分享講完了。本博客是博主這6個月學(xué)習(xí)安卓以來的自定義view部分,并在這里做出進(jìn)一步拓展以及寫出自己的理解。歡迎在下面指出錯誤,共同學(xué)習(xí)!

轉(zhuǎn)載請注明:【JackFrost的博客】

更多內(nèi)容,可以訪問JackFrost的博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評論 25 709
  • 三十多歲的人了,卻一直都是在渾渾噩噩的過日子,不知道自己內(nèi)心真正想要的生活是什么。 原本以為,和他一起...
    姆比尼菇?jīng)?/span>閱讀 128評論 0 0
  • 店里的老鼠好像挺多的,每到有點(diǎn)夜深的時候,就聽見他們在天花板上面跑,應(yīng)該是老鼠吧,如果不是的話,那只能說是錯怪你了...
    OC老陳閱讀 190評論 0 0
  • 他是我外公,此時他的照片被掛在大廳的中央,我深知,那是他的遺像。 一直以來,我深深的愛著他,這份愛一直藏在內(nèi)心,直...
    導(dǎo)演也是劇中人閱讀 233評論 1 5
  • 南方的大學(xué),春景綺麗,本人拍了許多照片,分享一下。 照片有點(diǎn)多,沒來得及調(diào)光,自然效果哦!
    吾棲夢閱讀 387評論 1 3

友情鏈接更多精彩內(nèi)容