1. BitmapShader 位图渲染:
/**
* bitmap 图片
* tileX X轴方向填充模式
* tileY Y轴方向填充模式
* */
BitmapShader shader = new BitmapShader(Bitmap bitmap, TileMode tileX, TileMode tileY);
- Shader.TileMode.CLAMP:如果着色器超出原始边界范围,会复制边缘颜色。
- Shader.TileMode.MIRROR:横向和纵向的重复着色器的图像,交替镜像图像是相邻的图像总是接合。这个官方的说明可能不太好理解,说白了,就是图像不停翻转来平铺,直到平铺完毕。
- Shader.TileMode.REPEAT: 横向和纵向的重复着色器的图像。
示例代码:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Matrix matrix = new Matrix();//矩阵缩放 旋转
float s = (float) getWidth() / bitmap.getWidth();
matrix.setScale(s, s);
shader.setLocalMatrix(matrix);
paint.setShader(shader);
int r = getWidth() / 2;
canvas.drawCircle(r, r, r, paint);//画园
}
效果:
2. LinearGradient 线性渲染
/**
*
* @param x0 渐变线开始处的x坐标
* @param y0 渐变线开始处的Y坐标
* @param x1 渐变线末端的x坐标
* @param y1 渐变线末端的y坐标
* @param colors 沿渐变线分布的颜色
* @param positions 每一个颜色位置
* @param tile 着色器平铺模式
*/
LinearGradient linearGradient=new LinearGradient(float x0, float y0, float x1, float y1, int colors[], float positions[], Shader.TileMode tile);
示例代码:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int w = getWidth();
int h = getHeight();
int[] colors=new int[]{Color.BLACK,Color.RED,Color.WHITE,Color.BLUE};
float[] positions= null;
LinearGradient linearGradient=new LinearGradient(0,h,w,h,colors,positions, Shader.TileMode.CLAMP);
paint.setShader(linearGradient);
canvas.drawRect(0,0,w,h,paint);
}
效果:3.SweepGradient 渐变渲染/梯度渲染
/**
* @param cx 中心的x坐标
* @param cy 中心的Y坐标
* @param colors 沿渐变线分布的颜色
* @param positions 每一个颜色位置
*/
SweepGradient sweepGradient = new SweepGradient(float cx, float cy, int colors[], float positions[]);
示例代码:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int w = getWidth();
int h = getHeight();
int[] colors = new int[]{Color.BLACK, Color.TRANSPARENT, Color.WHITE, Color.BLUE};
float[] positions = null;
SweepGradient sweepGradient = new SweepGradient(w / 2, h / 2, colors, positions);
paint.setShader(sweepGradient);
canvas.drawCircle(w / 2, w / 2, w / 2, paint);
}
效果:
4.RadialGradient 环形渲染
/**
* @param centerX 半径中心的x坐标
* @param centerY 半径中心的y坐标
* @param radius 此渐变的圆的半径。
* @param colors 要在圆的中心和边缘之间分配的颜色
* @param stops 每一个颜色位置
* @param tileMode 着色器平铺模式
*
*/
RadialGradient radialGradient = new RadialGradient(float centerX, float centerY, float radius,int colors[], float stops[], Shader.TileMode tileMode);
示例代码:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int w = getWidth() / 2;
int[] colors = new int[]{Color.BLACK, Color.RED, Color.WHITE, Color.BLUE};
float[] positions = null;
RadialGradient radialGradient = new RadialGradient(w, w, w, colors, positions, Shader.TileMode.CLAMP);
paint.setShader(radialGradient);
canvas.drawCircle(w, w, w, paint);
}
效果: