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即可。目标是在同样的测试条件下运行顺畅。

进阶功能

目前暂时有想到几项

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

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章