Paint paint.setShader 着色器

Shader  ---着色器,Canvas的drawXXXX这个方法是画具体的形状,画笔的shader定义的就是图形的着色和外观

BitmapShader--位图图像渲染,用BitMap对绘制的图形进行渲染着色,简单来说是用图片对图形进行贴图
圆形头像,放大镜效果

TileMode 拉伸形式
CLAMP --是拉伸最后一个像素铺满
MIRROR ---是横向纵向不足处不断翻转镜像平铺

REPEAT ---类似电脑壁纸,横向纵向不足的重复放置


LinearGradient--线性渲染 
霓虹灯文字,倒影图片


SweepGradient----渐变渲染/梯度渲染


雷达扫描效果


RadialGradient----环形渲染
水波纹效果


ComposeShader----组合渲染


/**
 * 位图图像渲染 BitmapShader用法
 * TileMode.CLAMP 拉伸最后一个像素去铺满剩下的地方
 * TileMode.MIRROR 通过镜像翻转铺满剩下的地方。
 * TileMode.REPEAT 重复图片平铺整个画面(电脑设置壁纸)
 */
//画个圆形头像
paint.setStrokeWidth(0);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);

//矩阵可以缩放这个图片
Matrix matrix = new Matrix();
matrix.setScale(0.5f,0.5f);
bitmapShader.setLocalMatrix(matrix);

paint.setShader(bitmapShader);
int dia = bitmap.getWidth() > bitmap.getHeight()? bitmap.getHeight() :bitmap.getWidth(); //直径
canvas.drawCircle(bitmap.getWidth()/2,bitmap.getHeight()/2,dia/2,paint);
/**
 * 线性渐变 LinearGradient用法  可用于霓虹灯文字,倒影图片
 * x0, y0, 起始点
 *  x1, y1, 结束点
 * int[]  mColors, 中间依次要出现的几个颜色
 * float[] positions,数组大小跟colors数组一样大,中间依次摆放的几个颜色分别放置在那个位置上(参考比例从左往右)
 *    tile
 */
LinearGradient linearGradient = new LinearGradient(0,0,500,0,mColors,null, Shader.TileMode.REPEAT);
paint.setShader(linearGradient);
canvas.drawRect(0,0,1200,500,paint);

/**
 * 渐变渲染/梯度渲染  SweepGradient  用于雷达扫描效果
 */
SweepGradient sweepGradient = new SweepGradient(500,500,mColors,null);
paint.setShader(sweepGradient);
canvas.drawCircle(500,500,100,paint);
canvas.drawRect(0,0,200,200,paint);

/**
 * 环形渲染 RadialGradient----水波纹效果
 */
RadialGradient radialGradient = new RadialGradient(500,500,500,mColors,null, Shader.TileMode.MIRROR);
paint.setShader(radialGradient);
canvas.drawCircle(500,500,500,paint);


/**
 * 组合渲染 ComposeShader
 */
ComposeShader composeShader = new ComposeShader(bitmapShader,radialGradient, PorterDuff.Mode.MULTIPLY);
paint.setShader(composeShader);
canvas.drawRect(0,0,1200,1200,paint);




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值