自定义View之Paint
来源:互联网 发布:大数据平台需求分析 编辑:程序博客网 时间:2024/05/19 16:20
ComposeShader
ComposeShader的作用是实现两个颜色渐变效果的叠加,如BitmapShader与LinearGradient的混合渲染效果等,叠加的效果由过渡模式(Xfermode)或者PorterDuff.Mode来决定。
它有两个构造函数:
- ComposeShader(Shader shaderA, Shader shaderB, Xfermode mode)
- ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
其各参数的意义如下:
- shaderA:表示某一种渲染效果
- shaderB:表示某一种渲染效果
- mode:叠加的效果模式。对于过渡模式(Xfermode)或者PorterDuff.Mode不再过多的描述,不了解的,可参考博文逐一认识PorterDuff.Mode。
现有一个线性的颜色渐变(lgsShader):
val colorResA = resources.getColor(android.R.color.holo_red_dark)val colorResB = resources.getColor(android.R.color.holo_blue_dark)val colorResC = resources.getColor(android.R.color.black)val colorResD = resources.getColor(android.R.color.holo_green_dark)val colorArray = intArrayOf(colorResA, colorResB, colorResC, colorResD)val positionArray = floatArrayOf(0.0f, 0.3f, 0.4f, 1.0f)val lgsShader = LinearGradient(0f, 0f, widthView / 4f, 0f, colorArray, positionArray, Shader.TileMode.REPEAT)
线性渐变效果:
又有一个扫描渐变(sweepGradient):
val colorResA = resources.getColor(android.R.color.holo_red_dark)val colorResB = resources.getColor(android.R.color.holo_blue_dark)val colorResC = resources.getColor(android.R.color.black)val colorResD = resources.getColor(android.R.color.holo_green_dark)val colorArray = intArrayOf(colorResA, colorResB, colorResC, colorResD)val positionArray = floatArrayOf(0.0f, 0.3f, 0.4f, 1.0f)val sweepGradient = SweepGradient(widthView / 2.0f, heightView / 2.0f, colorArray, positionArray)
扫描渐变效果:
而,PorterDuff.Mode.LIGHTEN的效果是:保留原图像和目标图像的像素的最大的分量,效果就是源图像和目标图像相交的部分变亮
此时,将lgsShader和sweepGradient按照PorterDuff.Mode.LIGHTEN模式效果叠加:
val composeShader = ComposeShader(lgsShader, sweepGradient, PorterDuff.Mode.LIGHTEN)mPaint.shader = composeShadercanvas?.drawCircle(widthView / 2.0f, heightView / 2.0f, radius, mPaint)
效果如下:
对于我们所熟悉的是PorterDuff.Mode又分为Alpha合成模式和混合模式。对于ComposeShader而言,不管是采用哪种混合模式都应慎用,达到的效果太不可控。
若想了解更多Paint相关的内容,请跳入: 自定义View系列文章目录
如果觉得我的文章对您有用,请随意点赞、评论。您的支持将鼓励我继续创作!
阅读全文
0 0
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 自定义View之Paint
- 【Paint】Android 自定义View之Paint篇(更新中...)
- 自定义view(二):onDraw 之 Paint
- 自定义View (三) :onDraw 之 paint 画笔
- 自定义View(一)---Paint
- android 自定义View之 Paint类的介绍
- Android自定义View——Paint之Xfermode
- Android 自定义View之路——Paint
- java二维数组
- 非块级元素的宽高设置
- LINUX_C编程实战—第十章《进程间的通信》-信号量
- C语言:编写一个函数实现一串字符串的左旋或者右旋
- 飘浮盒子,随机色,随机宽高
- 自定义View之Paint
- android中 dp->px和px->dp的工具方法
- C#初入CLR基础(一)
- 深入理解虚拟存储器(1:虚拟存储器概念与工作原理)
- Mac 10.12.6 下环境变量的配置。大坑套小坑。
- LINUX_C编程实战-《进程间的通信》-共享内存
- Docker挂载主机目录ls: cannot open directory .: Permission denied
- newinstance()和new有什么区别?
- 睿思