昨天一则新闻刷爆了微博,并迅速的攻占了我们的朋友圈。

中国平安财险科技中心,一个程序员把产品经理给打了,原因是产品经理提出一个需求:根据用户手机壳的颜色可以改变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主题颜色,这种感觉还是挺不错的呢!所以大家还是别喷那个产品经理了,说不定未来这个功能就遍地都是了呢!

Android开发浅谈:关于如何把手机壳颜色设置为我们App的主题颜色相关推荐

  1. 转载: Android开发浅谈:关于如何把手机壳颜色设置为我们App的主题颜色

    昨天一则新闻刷爆了微博,并迅速的攻占了我们的朋友圈. 中国平安财险科技中心,一个程序员把产品经理给打了,原因是产品经理提出一个需求:根据用户手机壳的颜色可以改变App的主题颜色-然后他就被程序员给打了 ...

  2. Android开发--浅谈ExpandableListActivity

    ExpandableListActivity使用 使用方法(可以和ListActivity进行对比) 创建一个Activity类继承ExpandableListActvity 三个layout 主布局 ...

  3. android开发浅谈之KeyEvent事件处理

    一个key事件的调用过程 一个偶然的机会,有一个报错的问题,日志如下: AndroidRuntime: at android.view.View.performClick(View.java:7259 ...

  4. 校园兼职网站php设计,基于PHP+MySql的校园兼职信息平台的开发浅谈

    Data Base Technique 0数据库技术基于PHP+MySqI的校园兼职信息平台的开发浅谈文刘晓智1杨雨锋2李万星2 表1:数据库一蹬表 摘要 首光简要介绍了编程语孬和MySql数据库的主 ...

  5. Android开发之如何保证Service不被杀掉(broadcast+system/app)

    Android开发之如何保证Service不被杀掉(broadcast+system/app) 序言 最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作 ...

  6. 手机热点设置虚拟服务器,以三款路由器为例,浅谈手机热点中继路由器的设置方法...

    以三款路由器为例,浅谈手机热点中继路由器的设置方法 2017-01-23 22:37:04 43点赞 328收藏 36评论 前言 各位值友,新年好! 这篇文章写一点路由使用心得.在此之前,我和许多人一 ...

  7. [转]Android蓝牙开发浅谈

    转自:http://www.eoeandroid.com/thread-18993-7-1.html 对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少    ...

  8. 嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区

    浅谈嵌入式MCU开发中的三个常见误区 原创 2017-09-30 胡恩伟 汽车电子expert成长之路 目录 (1)嵌入式MCU与MPU的区分 (2)误区一:MCU的程序都是存储在片上Flash上,然 ...

  9. 求助帖:android开发初期:为什么我在活动二设置的singInstance模式跑到活动三去了???

    求android开发的高手帮我看看这个问题吧: <activity android:name=".SecondActivity"             android:la ...

最新文章

  1. linux服务器磁盘格式,linux下查看磁盘分区的文件系统格式
  2. Serverless化微服务架构实战
  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之环境配置
  4. php的web表单系统源码毕设_从业十多年看了千百套Java毕设项目,整理出100个精品!免费分享...
  5. blender使用_DigiVita使用Blender教女孩编码
  6. java 通过类名创建类,通过类名动态生成对象
  7. Android 系统开发系列二
  8. Atitit 定时器在项目的应用于 servless数据库 atikvdb 目录 1.1. 项目背景 1 1.2. 特点::免驱动。简单快捷。。 1 1.3. 功能指标 1 1.4. 模块与功能实
  9. 【手写数字识别】基于matlab RBF手写数字识别【含Matlab源码 471期】
  10. 唐宇迪学习笔记2:Python数据分析处理库——pandas
  11. MATLAB中的小技巧
  12. 计算机专业学习目标计划怎么写,制定计算机学习计划范文3篇
  13. 怎么将计算机的网络恢复连接,win7怎么还原网络设置 win7本地连接不上的解决方法...
  14. Cocos2d-x面试题
  15. 大一高级计算机考试内容,大一计算机考试内容
  16. 1010 -- 青蛙的约会
  17. C语言函数while的用法
  18. lbs、agps流程
  19. 测试环境docker-swarm安装部署
  20. Jenkins编辑或替换All view

热门文章

  1. 快手2020校园招聘秋招笔试--工程C试卷(21题)滑动窗口解决字串
  2. 软件工程测试工程师自我评价,测试工程师自我评价
  3. 由于找不到vcruntime140_1.dll,无法继续执行代码重新安装程序可能会解决此问题
  4. Python编程:输入两个整数A,B 计算A+B的结果
  5. MATLAB中detrend函数使用
  6. 山东大学软件学院2021操作系统期末试题b卷
  7. 【BZOJ 5312】 线段树 与 或 区间 max
  8. 拉格朗日松弛算法在组合优化问题中的应用
  9. 最新报告下载 | “5G+云+AI”将如何赋能千行百业?
  10. 梦想的脚步---C语言的学习与成长