paint的属性的设置,其实最终调用的是native方法,举个栗子:canvas
咱们打开此方法能够看到具体的实现以下:数组
public void setStrokeCap(Cap cap) {
nSetStrokeCap(mNativePaint, cap.nativeInt);
}复制代码
咱们能够看到里面就调用了nSetStrokeCap()方法,这是一个native方法:bash
咱们再来看看setStrokeCap(Cap cap) 中的Cap参数,这个参数有三种类型:BUTT(默认类型)、ROUND(圆角效果)、SQUARE(方角效果),当我没画一条直线时,这里经过一张图片能够很直白的提现这几种类型的差异:ide
这个方法是设置画笔的拐角风格,这里有三种类型MITER(尖角:默认类型)、ROUND(圆角)、BEVEL(钝角)三种状态,一样咱们能够用一张图来描述这三种类型的区别:字体
下图介绍的是FontMetrics的集中经常使用的属性:ui
下面讲讲使用的Shader的几个子类:spa
构造方法1:3d
LinearGradient(float x0, float y0, float x1, float y1,int color0,int color1,TileMode tile)复制代码
参数说明:x0,y0,x1,y1:渐变的两个端点的位置; color0、color1:两个端点的颜色,tile:端点范围以外的着色规则,类型是TileMode.code
咱们经过如下代码实现这个构造方法:cdn
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mShader = new LinearGradient(0, 0, 500, 500, Color.RED, Color.BLUE, Shader.TileMode.CLAMP);
mPaint.setShader(mShader);
canvas.drawRect(0, 0, 500, 500, mPaint);
}复制代码
运行效果:
构造方法2:
LinearGradient(float x0, float y0, float x1, float y1, int colors[],float positions[], TileMode tile)复制代码
参数说明:x0,y0,x1,y1:渐变的两个端点的位置; colors:端点颜色的数组,position[]:能够为null,例如position[]数组为{0.5, 1};colors[]数组为{Color.RED, Color.BLUE},第一个值0.5表示整个线性渲染的比例到50%,这50%的颜色为colors[]数组中的第一个颜色值Color.RED,1对应colors数组中的第二个值Color.BLUE,表示当渲染比例到了100%的时候颜色为Color.BLUE。这里主要若是positions[]不为null的时候,positions[]数组的长度要与colors[]数组长度相等,不然会抛出异常。tile:端点范围以外的着色规则,类型是TileMode.
咱们经过如下代码使用这个构造方法:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mShader = new LinearGradient(0, 0, 500, 500,
new int[]{Color.RED, Color.BLUE, Color.GREEN},
new float[]{0f, 0.5f, 1f}, Shader.TileMode.CLAMP);
mPaint.setShader(mShader);
canvas.drawRect(0, 0, 500, 500, mPaint);
}复制代码
效果以下:
因而可知:0~0.5是Color.RED~Color.BLUE之间的渐变,0.5~1是Color.BLUE~Color.RED之间的渐变。