震惊!产品经理说滑动图片的时候,顶部导航栏和字体要跟着图片颜色变化,不能被图片底色盖住!我气的把Palette的资料都翻烂。。。

news/2025/1/6 5:02:40/

       前段日子,公司要做一个图片浏览相关的APP,经过20来天的奋战,总算把项目赶出来。拿着Demo过去让产品经理体验的时候,产品不知道为啥脑抽了,说用户使用全屏浏览图片的时候把顶部状态栏都隐藏了,他突然想看时间了怎么办?然后就要求把顶部状态栏显示出来,同时在图片中间显示时间。震惊!既然顶部状态栏都显示了,为啥还得在图片上再加一个textview来展示时间?

        又经过长时间的奋斗后,把修改后的Demo再次递给产品,他一看,说如果图片颜色太深或者太浅,会导致顶部状态栏和图片上的字都不容易看清楚,接着再次提出需要顶部状态栏和图片上的字要根据图片的颜色来改变。我头都想给他打爆,但是想着如今的经济形势和花呗,借呗,信用卡,只能无奈接受。

        在我有限的知识库了,突然想到了要识别图片颜色的库,好像还真有一个——Palette。

        初识Palette还是在学校的时候,那会老师要求我们做一个调色板,搜索资料的时候刚好看到,那时候的Palette还是V7包的,现在都出了AndroidX了。抱着回头复习的心态,我沉下心来翻看了Palette的资料。

        首先引入,我使用的是AndroidX:

        

implementation 'androidx.palette:palette:1.0.0'

        然后是使用,palette的实例对象需要通过Bitmap的实例对象来生成,也很好理解,因为Palette就是同过对像素的采集来统计来告诉我们图片的颜色情况。代码如下:

  var bitmap = BitmapFactory.decodeStream(“fileName路径 or 图片Id”)var builder = Palette.from(bitmap)var palette = builder.generate()例如:var bitmap = BitmapFactory.decodeStream("file:///android_asset/1.png") 或者var bitmap = BitmapFactory.decodeResource(resources,R.mipmap.panda_test)var builder = Palette.from(bitmap)var palette = builder.generate()

        当我们拿到了Palette的对象后,我们就可以通过以下的方法来获取对应的颜色状态:

        val vibrant: Swatch? = palette.vibrantSwatch //获取充满活力的色调val darkVibran: Swatch? = palette.darkVibrantSwatch //获取充满活力的黑val lightVibran: Swatch? = palette.lightVibrantSwatch //获取充满活力的亮val muted: Swatch? = palette.mutedSwatch //获取柔和的色调val darkMuted: Swatch? = palette.darkMutedSwatch //获取柔和的黑val lightMuted: Swatch? = palette.lightMutedSwatch //获取柔和的亮val dominantMuted: Swatch? = palette.dominantSwatch //获取主色调

        由于我的要求是更新状态栏的字体颜色,所以我只要找到图片的主色调,判断它是深还是浅,对应修改状态栏的字体颜色是白还是黑就好,同时修改图片显示的文字颜色就可以。

        这里我提供一下修改状态栏的代码:

//状态栏字体黑色  
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or             View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}//状态栏字体白色if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}

        然后是颜色的判断依据代码,我是根据灰阶来判断,代码如下:

 val red = color and 0xff0000 shr 16val green = color and 0x00ff00 shr 8val blue = color and 0x0000ffval gray = (red * 0.299 + green * 0.587 + blue * 0.114).toInt()if (gray >= 192) {// 浅色系}else{// 深色系}

        就这样我把产品经理的奇葩需求解决了,同时我也把之前的Palette知识又捡了回来。对于这种无理奇葩的需求其实最重要的还是要把自己的心态摆正,只要自己的心态稳如老狗,以后对于各种各样的需求就能平静待之。最后把效果展示一下,如果有帮到各位大佬,请不要吝惜收藏点赞哈!

        


http://www.ppmy.cn/news/730084.html

相关文章

element Plus Select选择器实现查询搜索 下拉选择

这Select选择器用于哪里 怎么用? Select 选择器可以用于许多不同的场景,包括但不限于以下几个方面: 表单:Select 选择器常用于表单中的下拉选择字段,例如选择国家、城市、性别、职位等。用户可以从预定义的选项中选择…

(09)ATF存储抽象层

存储抽象层 为了支持不同的存储设备,便于移植,TF-A设计统一的存储抽象层接口。 基本概念 存储 定义一些与设备IO操作的结构和函数。 设备类型 定义可访问的设备类型。 类型描述IO_TYPE_SEMIHOSTING半主机设备,如加载镜像通过文件名读取数…

7时过2小时是几时_一个时辰等于几个小时

展开全部 一个时辰等于两个小时。 1、时辰是古代计时单位,古代人把一62616964757a686964616fe78988e69d8331333365666239天划分为十二个时辰,每个时辰相等于现在的两小时。相传是根据十二生肖中的动物的出没时间来命名各个时辰。 2、小时(hour)是一个时间…

一年月份大小月口诀_农历大小月卦口诀详解(最新版)

农历大小月卦口诀详解篇一《天干地支推算口诀》 天干地支推算口诀 推算年干支口诀 掌上推算年干支,支子花甲起根源。 阳支都是旬开始,天干为甲尾四年。 隔位逆推十年正,顺推年尾五零三。 逐支加减六十数,掌上推算千万年。 推算方法…

中国命理学史论-第一章传统命理学的现代诠释

经历了现代的科学教育,八字命理往往与封建迷信划上了等号,但是,作为一门实践性的科学,必是有其应用的准确性才得以在几千年渊远流传,神秘和无知,是培育迷信的土壤,我们可以尝试用现代的思想去重…

古代的时辰是怎样划分的

古代的时辰是怎样划分的 时辰 1、十二时辰制。 西周时就已使用。汉代命名为夜半、鸡鸣、平旦、日出、食时、隅中、日中、日昳、晡时、日入、黄昏、人定。又用十二地支来表示,以夜半二十三点至一点为子时,一至三点为丑时,三至五点为寅时&…

孤灯诡谈(一)

亘古不变的月,孤独地挂在如墨的夜空,苍白的光照耀在冰冷的土地上,给我的只是阴寒与苦寂。夜风呼啸,刺透我的心肺,剧烈的咳嗽改变不了我冷漠的表情,也许不是冷漠,只是不知道还能用什么表情面对这…

C语言墓碑上的字符,古代人墓碑上的文字都有什么讲究

碑文,是指刻在竖石上的文字。这种文字是专为刻碑而作。有些文章虽刻在碑上,但不是为立碑而作的,就不能叫作碑文。碑文这种体裁有文,有铭,又有序。立题时,看包括哪些形式而定,或直题为某某碑&…