Paint使用
基本方法
public void setStrokeWidth(float width)setStrokeWidth方法用来设置边的宽度。该方法只有在Paint的style设置为STROKE或者FILL_AND_STROKE时起作用。STROKE 的宽度均分两半,一半绘制在圆外,一半绘制在圆内。
Paint mPaint = new Paint();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(128);
mPaint.setColor(getResources().getColor(R.color.orange));//#FF7F00
canvas.drawCircle(192,192,128,mPaint);//绘制带stroke的圆
mPaint.setColor(getResources().getColor(R.color.green));//半透明绿色#2200FF00
mPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(192,192,128,mPaint);//绘制实心圆
MaskFilter
ColorFilter
Xfermode
Xfermode设置两张图片相交时的模式。Paint提供public Xfermode setXfermode(Xfermode xfermode)来为画笔设置Xfermode。Xfermode有三个子类:AvoidXfermode,PixelXorXfermode和PorterDuffXfermode,前两个类在API 16被遗弃了,所以这里不作介绍。PorterDuffXfermode类主要用于图形合成时的图像过渡模式计算,其概念来自于1984年在ACM SIGGRAPH计算机图形学出版物上发表了“Compositing digital images(合成数字图像)”的Tomas Porter和Tom Duff,合成图像的概念极大地推动了图形图像学的发展,PorterDuffXfermode类名就来源于这俩人的名字组合PorterDuff。
构造函数:
PorterDuff.Mode代表混合模式,是一个枚举类型,他的值包括如下:CLEAR、SRC、DST、SRC_OVER、DST_OVER、SRC_IN、DST_IN、SRC_OUT、DST_OUT、SRC_ATOP、DST_ATOP、XOR、DARKEN、LIGHTEN、MULTIPLY、SCREEN。

PathEffect
PathEffect本身是没有实现什么效果的,只是一个简单的基类,不过android.graphics提供了集中常见的效果,系统为了高效的实现不同效果,它们的实现都封装在native中。
CornerPathEffect 线条的交汇角效果
DashPathEffect 线条的虚线效果
DiscretePathEffect 线条的离散
PathDashPathEffect 使用Path做虚线的效果(Path可以画图像)
ComposePathEffect 组合两种效果
SumPathEffect 叠加向后纵效果
着色器
Shader即着色器,负责为定义的图形着色。
Paint提供了public Shader setShader(Shader shader)方法为画笔设置着色器。
android.graphics.Shader类有5个子类:
BitmapShader
LinearGradient
RadialGradient
SweepGradient
ComposeShader
BitmapShader
BitmapShader就是使用Bitmap对绘制的图形进行着色。
构造函数:
第一个参数是一个bitmap对象。后两个参数用来设置当图片小于要绘制的图形的尺寸,x轴和y轴图片的绘制方式。
TileMode是一个枚举类型,可使用的类型包括如下:
CLAMP:拉伸
REPEAT:重复显示图片
MIRROR:镜像
x轴和y轴都设置为REPEAT:

x轴和y轴设置都为MIRROR:

x轴和y轴设置都为CLAMP:

BitmapShader一个常用的场景就是绘制特殊图形的图片,比如圆形图片和圆角矩形图片。
将上面的例子绘制矩形修改为绘制圆形就可以得到一个圆形图片。

开源项目CircleImageView、android-shape-imageview本质都是利用BitmapShader实现的。
LinearGradient
LinearGradient利用线性渐变填充图形。LinearGradient具有两个构造函数:
第一个构造函数可以设置两种颜色。

第二个构造函数可以设置多种颜色。
先定义一个字符串数组:

RadialGradient
RadialGradient创建从中心向四周发散的辐射渐变效果。RadialGradient同样有两个构造函数:

SweepGradient
SweepGradient可以用来创建360度颜色旋转渐变效果,具体来说颜色是围绕中心点360度顺时针旋转的,起点就是3点钟位置。
SweepGradient有两个构造函数:
SweepGradient不支持TileMode参数。cx,cy决定了中心点的位置。

ComposeShader
ComposeShader它可以将两个Shader按照一定的Xfermode组合起来。
ComposeShader有两个构造函数:
下面我们将一个BitmapShader与LinearGradient进行混合。
BitmapShader使用的图片为下图:


参考
最后更新于