Paint的API大致可以分为4类:
- 颜色
- 效果
- drawText()相关
- 初始化
颜色
canvas绘制的内容有三层对颜色的处理
1.1基本颜色
像素的基本颜色,根据绘制内容的不同而有不同的控制方式,Canvas的颜色填充类方法drawColor/RGB/ARGB()的颜色,是直接写在方法参数里,通过参数来设置的;drawBitmap()的颜色,是直接由Bitmap对象来提供的,除此之外,是图形和文字的绘制,他们的颜色就需要使用paint参数来额外设置了
paint设置颜色的方法有两种:一种是直接用Paint.setColor/ARGB()来设置颜色,另一种是使用Shader来指定着色方案
前两种没什么可说的, 最后一种setShader(Shader shader)设置Shader,使用此方法后setColor/ARGB()所设置的颜色就不再起作用
通常绘制时不直接使用Shader类,而使用它的几个子类:
- LinearGradient 线性渐变,设置两个点和两种颜色,以这两个点作为端点,使用两种颜色的渐变来绘制颜色
构造方法:
LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
参数:
x0 y0 x1 y1:渐变的两个端点的位置
color0 color1 是端点的颜色
title:端点范围之外的着色规则,类型是TitleMode。TItleMode一个有3个值可选:CLAMP,MIRROR和REPEAT。CLAMP(夹子模式?)会在端点之外延续端点处的颜色;MIRROR是镜像模式,REPEAT是重复模式。
- RadialGradient 辐射渐变,从中心向周围辐射状的渐变
构造方法:
RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor, TileMode tileMode)
参数:
centerX centerY:辐射中心的坐标
radius:辐射半径
centerColor:辐射中心的颜色
edgeColor:辐射边缘的颜色
titleMode:辐射范围之外的着色模式
- SweepGradient 扫描渐变
构造方法:
SweepGradient(float cx, float cy, int color0, int color1)
参数:
cx cy:扫描的中心
color0:扫描的起始颜色
color1:扫描的终止颜色
- BitmapShader 用Bitmap着色,可用来制作圆形头像等
构造方法:
BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
参数:
bitmap:用来做模板的Bitmap对象
titleX:横向的TitleMode
titleY:纵向的TitleMode
- ComposeShader 混合着色器
构造方法:
ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
参数:
shaderA shaderB:两个相继使用的Shader
mode:两个Shader的叠加模式,即shaderA和shaderB应该怎样共同绘制,它的类型是PorterDuff.Mode:
一个有17个,可以分为两大类:
- Alpha合成(Alpha Compositing)
- SRC(source)
- SRC_OVER(Source Over)
- SRC_IN(Source In)
- SRC_ATOP(Source Atop)
- DST(Destination)
- DST_OVER(Destination Over)
- DST_IN(Destination In)
- DST_ATOP(Destination Atop)
- CLAEAR(Clear)
- SRC_OUT(Source Out)
- DST_OUT(Destination Out)
- XOR(Exclusive Or)
- 混合(Blending)
- DARKEN
- LIGHTEN
- MULTIPLY
- SCREEN
- OVERLAY
第一类有12种,是关于Alpha通道的计算,也可称为Alpha合成(Alpha compositing)
第二类混合,这一类操作的是颜色本身而不是Alpha通道
对于Alpha合成类的操作,掌握他们,并在实际开发中灵活运用;而对于混合类的,你只要把他们的名字记住就好了