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主题颜色,这种感觉还是挺不错的呢!所以大家还是别喷那个产品经理了,说不定未来这个功能就遍地都是了呢!

猜你喜欢

转载自blog.csdn.net/qq_34149335/article/details/81363041
今日推荐