【注:】本文首發於簡書,掘金會在同時同步傳送,其餘網站皆無授權。
歡迎瀏覽掘金主頁和簡書主頁,我只是一枚普通的工程師-V-
喜歡自定義控制元件,也喜歡分享我的思路,希望能得到你的批評和建議,也希望能幫到你
作為一枚有追求的程式設計師,既然沒法拿刀去捅產品,那隻好做的比產品的設計圖更加好吧——來自“我”.
寫在前面:本篇為起源,暫無涉及程式碼,僅涉及想法和一些進度,後續會慢慢更新
前言
YaHo~ 好久不見,也好久沒在簡書寫文章了,我是一起擼個朋友圈的作者,雖然好久好久沒在朋友圈文集裡寫文章了(原因在文集裡有《再談朋友圈專案》),但是朋友圈專案我可是一直都有維護的哦~從來都木有落下
如果感興趣,您可以看看朋友圈專案:github.com/razerdp/Fri…
嗯,介紹扯完,接下來就進入正題吧
起源
作為程式設計師,一個新的需求/控制元件的起源,很多時候都是來源於產品,所以,這次控制元件的誕生,其實很簡單,來源於一張優化點設計圖(只擷取部分,其餘部分不宜公開):
看起來這張圖so easy啦~對吧
3只paint,3個顏色,隨便畫畫,搞定~
可是,不知道為啥,看著這個甜甜圈還挺漂亮的,不甘心就這麼簡單的畫出來就完事。。。
於是心裡有個魅惑的聲音告訴我:“既然這個不急,只是優化點,那為何不優化徹底一點,做的比這貨更漂亮呢”
被魅惑的我,立馬熟悉的開啟AS,新建Project,填上Name,弄個類繼承View,然後。。。。
然後。。。他喵的然後怎麼幹啊!!!!
迷茫
相信很多人寫自定義控制元件都會有這個疑惑。。。我建好類了~ 我繼承好了View了~ 接下來,,,我不會做了TAT
其實不僅僅你們,就是我寫過不少的控制元件,現在建好一個類,我也偶爾會有這個情況。。。(嗯,可能寫的還是不夠多)
原因很簡單:所有的元素,都是心裡所想,並沒有做出一個具體的動畫效果和預覽,所以方向太多,一下子很迷茫
因為當我們想完成一個控制元件或者動畫效果是,我們往往很快就能在心裡確定好我們想要什麼效果,然而當我們真的要實施的時候,就會發現似乎不知道該怎麼把效果變成一行行的程式碼
在迷茫的時候,我的做法是,把我的期望寫下來
在心裡,我的期望是這樣的:
- 我的甜甜圈會動
- 我的甜甜圈可配置引數要多
- 我的甜甜圈點選的時候要有個效果,至於效果,大概是浮上來呈現出Z軸上移的樣子,最好能加上陰影
- 我的甜甜圈要簡單好上手。。。
期望寫下來,其實就是給自己確定一個TODO-LIST,也給自己一個方向,至少在不懂怎麼做的時候,把一個小點做出來再說,畢竟第一版的程式碼,都是很ugly的。。。
在我把上面的每個小點做出來後,目前我的甜甜圈進度是這樣的:
選定方案
迷茫之後,就要真正開始動手,而動手開工的前提,是需要確定好自己的工具
比如按照我上面所寫的期望,我會這樣去逐步確定我的方案(部分)
甜甜圈:
- 繼承
View
,自己畫出來
- 繼承
我的甜甜圈會動
- 使用animation,通過數值變換來使甜甜圈慢慢生長
我的甜甜圈可配置引數要多
- 使用一個類用作引數配置,甜甜圈根據這個類來進行渲染
我的甜甜圈點選的時候要有個效果,至於效果,大概是浮上來呈現出Z軸上移的樣子,最好能加上陰影
- 通過大小變化+paint的BlurMaskFilter使邊緣發光模擬出一個視覺欺騙,看起來像選中浮起一樣
我的甜甜圈要簡單好上手
- 暴露的api儘量的少,內部程式碼封裝儘量內聚,多使用介面抽象
其他期望。。。做著做著就會產生的了
開工
當你真的要開始寫了,我給出我的建議,不管你的程式碼好還是不好,不管你對自己能否實現有沒有一個信心,我都建議,你要把你的程式碼儘可能的給別人看,比如github,比如技術交流論壇,比如寫技術文章
總之就是要分享給別人看,通過大家的批評,或者讚賞,不斷的激勵著你,不斷的在無形中督促著你,你會不自覺的去想方設法提升程式碼質量,提升封裝質量,提升你的技術水平
所以,在建好專案之前,我們,就先Push到github吧~
github:github.com/razerdp/Ani…