1. 程式人生 > >Android開發淺談:關於如何把手機殼顏色設定為我們App的主題顏色

Android開發淺談:關於如何把手機殼顏色設定為我們App的主題顏色

昨天一則新聞刷爆了微博,並迅速的攻佔了我們的朋友圈。

中國平安財險科技中心,一個程式設計師把產品經理給打了,原因是產品經理提出一個需求:根據使用者手機殼的顏色可以改變App的主題顏色.....然後他就被程式設計師給打了。

很多程式設計師看到這樣的新聞,包括我,都會拍案叫好,打的痛快,這種就屬於胡亂提需求,毫無邊際,不痛打你才怪!

事件發生到現在,目前最新的訊息兩人已經被開除,據說離職之前兩人又打了一頓,,,

在關於這篇新聞的背後,談笑之餘,作為一名Android開發人員,我們仔細的審視這個產品經理提出的需求,拋開無關的東西,我們思考一下:這個奇葩看似不可能實現的需求真的可以實現嗎?如果可以實現那麼該怎麼做呢?用什麼方式去做?

這裡,我就針對這個天馬行空的浮誇需求,帶大家深入挖掘,淺談一下該如何實現這個需求?它的實現方式是什麼?

首先,實現這個需求可能會分為兩種模式:一個是硬體支援;另外一個就是純軟體的開發實現。

我們先說硬體支援模式。早先有一家公司的確是做到了手機殼顏色設定App主題顏色,這家公司就是錘子科技。他們採取的方式就是,在手機殼裡面裝載有一個晶片,晶片裡面儲存的有該手機殼的顏色資訊,當用戶裝上手機殼,手機就會通過預留的介面訪問到手機殼的顏色資料,從而實現了自動更改App主題顏色。

我們首先說一下,這樣的模式是很可取的,但是不是很現實。現實就是我們大家的手機殼有幾個是帶有晶片?我們大家有幾個用的是錘子?我不太瞭解錘子手機的市場,但是錘子相比小米華為,藍綠廠,他的手機使用人群並不是很大,所以這樣的限制也就導致了硬體支援這塊走不通的。

那麼只能走純軟體開發了。ok,那麼純程式碼編寫,我們是否可以做到設定手機殼顏色為App主題顏色呢?

這裡我還要細分一下,我把它分為可自動設定,即套上手機殼就自動更換主題顏色;不可自動設定,即需要使用者手動設定。

我們先說純軟體的開發是否可以實現自動設定。之前,我在網上也有看到給出的方案,像是段子一樣:使用前置攝像頭掃描瞳孔的反光,解析得的圖片資料,提取其中的顏色,設定為App主題顏色,,,

我們現在分析一下這種方式可行嗎?答案是不可行的,首先處理圖片顏色資料要求圖片是清晰光度強,這裡處理的是人眼睛中反射的景象........先不說能不能獲取到這個反射的景象,咱就說獲取到之後處理,圖片模糊的不要不要的,你說你如何去解析這樣的一張圖片?很大可能就是解析失敗!

使用者套上手機殼就自動改變App主題顏色這是不可能的,因為手機殼是在手機的背部,你玩手機你告訴我你能看見背部的手機殼嗎?肯定不能!所以上面的那個調前攝捕捉人眼反射影象啥的,根本就不現實,因為你的眼睛就看不見手機殼,你還反射個錘子!所以這個方案不成立。那麼後攝可不可以,也不可以,帶上手機殼後你說你怎麼用後攝掃描手機殼,不現實!

那麼該如何正確的實現設定手機殼顏色為App主題顏色呢?

這裡給出一個可行的解決方案,那就是手機殼當然是不能套上的,只能拿下來。使用者如果想要把他的手機殼顏色設定為App主題顏色,那麼他就需要把手機殼取下了,開啟後置攝像頭,就像是掃描二維碼一樣,掃描手機殼,之後就會提取手機殼顏色,設定為App主題,大告成功!這樣我們也實現了自動設定手機殼顏色為App主題顏色,唯一區別就是,手機殼不能套上去,需要拿下來進行相關的掃描處理~~當然,你如果覺得別人的手機殼好漂亮好好看,你也可以直接掃描她的手機殼顏色,設定為你的App主題顏色!

這個方案是最可行的目前,如果被採用或者被引用,請尊重我的智慧財產權,聯絡我~

好了,既然給出了可行的解決方案,那麼我們到底該如何在程式碼中去實現它?這裡我會給大家淺談一下具體的做法,相關的實現程式碼我也沒有寫,大家聽了我的講解,可以試著嘗試一下~

首先老樣子,我們還是先分析使用者需求,我們可以得到下面幾點:

1:可以開啟攝像頭進行掃描或者拍照,這個是最基本的需求;

2:可以具體識別到某個物體,這裡的物體專指的是手機殼;

3:顏色提取完成後,使用者可以自己選擇設定成哪種顏色。

 好了,下面我們就針對以上三點需求做出具體的分析:

首先是可以開啟攝像頭進行掃描或者拍照,這個需求我覺得應該沒得說吧,開啟攝像頭進行拍照這是很簡單的一個操作,這塊不是難點,我們直接看第二點:可以具體識別到某個物品。我認為這是整個需求中最難也是最重要的一環。

下面就重點分析第二點。這裡我們需要接觸到一個領域,那就是人工智慧中的影象識別!估計我們大家在平常的開發過程中,幾乎很少,或者很少接觸到人工智慧方面的開發,其實在安卓系統中,谷歌加入的有相應的人工智慧演算法,比如機器學習,影象識別,這裡都是有原生的,有感興趣的小夥伴可以去搜索一下相關的資料。原生的這些人工智慧使用起來難度大,比較複雜,而且還會有一下Api介面在國內你訪問不到,所以我這裡的建議就是,安卓原生的人工智慧,大家可以大致瞭解學習就好,在開發過程,使用國內第三方的人工智慧SDK是完全可以的。

博主曾經開發過人臉識別,使用的是虹軟的人臉識別SDK,整合也很方便,效果也是不錯。在這裡,人臉識別其實也就是影象識別中的一種,它是根據監測人眼睛之間的距離來做判斷依據的。回到我們的圖片識別,這裡我給大家推薦使用百度的影象識別SDK,阿里雲和別家的會有相應的收費,當然土豪就隨意了。大家可以去看一下百度影象識別SDK,這裡是Java版,沒有Android,不過也是一樣的,都可以直接使用。這裡給大家一個連結:百度雲圖像識別SDK開發文件

目前百度的影象識別種類中並不包括手機殼,想想也知道。手機殼並不是一重特殊物品。百度在這裡主要分為了:通用物品識別菜品識別,車輛識別,logo商標識別,動物識別,植物識別,六種物體識別。手機殼的話就屬於通用物品識別了。

這裡我們還需要做一個範圍處理,這是什麼意思?意思就是我們需要對圖片中手機殼的位置進行劃定。因為在大多數情況下,同框出鏡肯定不單單隻有手機殼一件物品,會是好幾樣物品一同在影象中,而我們需要提取顏色的只有手機殼一個!這裡確定手機殼在影象中的位置還是可以的,百度影象識別中有一個影象主體檢測,裡面有四個引數值left,top,width,height。left指的是定位位置長方形左上頂點的水平座標,top指的是定位位置左上頂點的垂直座標,width指的是長方形的寬度,height指的是長方形的高度。我們可以根據這四個引數劃定手機殼的位置,然後對顏色進行鍼對性的處理。

解決了影象識別問題,下面我們開始進行顏色拾取的講解。關於圖片的顏色拾取,安卓中有專門的類和方法來處理,下面就給大家介紹其中的Palette類。

Palette是一個可以從圖片(Bitmap)中提取顏色的幫助類,可以使UI更加美觀,根據圖片動態的顯示相應的顏色。Palette主要拾取的是主色調,我們知道圖片中是由多種顏色組成,Palette類可以中和圖片中的顏色,然後調出圖片最主要的色調。這裡需要解釋一下使用Palette類的原因:主要因為手機殼的顏色太花了!!現在我們每個人的手機殼顏色很少是那種單一的色調,大都是顏色五彩繽紛,這時如果我們去提取手機殼上這麼多種顏色,你說我們提取它的哪一種顏色?所以只能提取它最主要的色調,使用Palette是肯定的也是必須的!

這裡我對Palette類具體的用法不再多說,因為網上有很多的示例程式碼和詳細的講解,大家可以搜尋學習一下。

到這裡,我們關於如何設定手機殼的顏色為App的主題顏色就講解完畢,感興趣的小夥伴可以嘗試開發一下。我這裡再說一下,關於這個需求我們還可以給出一個簡單的實現方案。不需要通過影象識別就可以的方案!

簡單版的實現方案為:讓使用者拍攝一張手機殼的照片,然後把照片展示出來,提醒使用者手指在圖片上滑動來拾取相應的顏色!這裡關於影象識別就是要依靠使用者自己看了,只要眼睛不瞎,他肯定能找到照片中的手機殼。接下來他只要把手指滑動到照片中手機殼的位置,就可以獲得到它的顏色,從而進行設定。這樣的實現方案拋去了演算法中的人工智慧,開發起來是最容易實現的。

最後我還想說一句,其實這個需求並不是看起來腦洞大開奇葩無比,在博主看來這個需求還是有一定的市場,畢竟比較好玩。試想一下,在地鐵裡,在公交車上,在公司裡,你看到某人的手機殼顏色非常漂亮非常好看,你只需要像掃描二維碼一樣掃描一下他的手機殼就能快速的設定為你的App主題顏色,這種感覺還是挺不錯的呢!所以大家還是別噴那個產品經理了,說不定未來這個功能就遍地都是了呢!