Android Curv Gradient 曲线渐层

前言

平常我们使用的渐层方式通常都是在drawable用Xml配置参考
或者是在程序中设置Paint的shader参考
这样的文章介绍相信大家都看很多了,并且也挺熟练的

在使用过程中常觉得限制满多的,或者无法达到效果,例如这种不规则形状
因此就有个发想,如果配置的方式不再是直线跟角度是否就能够产生出比较接近不规则形状渐层的效果

Demo

先展示一下成果,参考Git Sample

做法

  • 先设置好曲线的控制点参考贝兹曲线原理
  • 分为直/横两个渲染的方向
  • 计算出每一条直线的渐变点
  • 按照设置的方向绘制渐层直线(例如View的尺寸为1920(直) * 1080(横),则直向渲染需drawLine 1080次,横向则为1920次)

检讨

目前用Oppo R17 Pro测试Log绘制时间大约在0~1毫秒,量少的时候没什麽影响,但是数量变多(测试时是用200个,画面同时呈现约190个)时会有明显的卡顿问题,并且有看到系统的Log警告(Skipped 2 frames! The application may be doing too much work on its main thread.)。主要的问题还是在drawLine的部分重复太多次,後续会再进行优化。

初步的想法是将drawLine移至Background thread,先绘制在另一张Bitmap上,在UI thread onDraw时就只要绘制Bitmap即可。目标是在同样的测试条件下运行顺畅。

进阶功能

目前暂时有想到几项

  • 增加渲染方向,不再只有直、横两种
  • 区块的渲染,例如下面这种渐层配置方式,按照目前的控制点条件判断是无法完成
    原图网址
    原图网址
  • 动态渐变
    ....
    感觉要做做不完,不过可以肯定的是,必须要先解决卡顿了才会开始做

<<:  CMoney菁英软件工程师战斗营关於低潮期_Week 6

>>:  NIST风险管理框架(RMF)-系统分类

Day 12 wireframe 大城市综览 + 天气预报( side project 配对单有意者请进)

今天开了配对单给大家做 side project,有兴趣可以来找找夥伴,前後端 / UIUX 皆可~...

[Day21] Scrum失败经验谈 – 没有价值的User story

User story:用一个简短的句子,描述用户的需求价值,也是大家所熟知的,身为一个「角色」,我想...

企业资料通讯Week4 (2) | HTTP

HTTP 与Web 请求 HTTP,超文本传输协定(HyperText Transfer Proto...

Day 16 实作个资隐私盘点

根据PLBD过往参与自家产品服务盘点各方将会用到的用户资料,不论是传输、使用及储存等都必须逐项展开列...