Paint.Shader(着色器)

本文详细介绍了Android中Shader的使用,包括BitmapShader、LinearGradient、SweepGradient、RadialGradient和ComposeShader,以及TileMode平铺模式的效果,并展示了各种渐变在不同场景的应用,如绘制图形背景、创建阴影和雷达扫描效果。
摘要由CSDN通过智能技术生成

Shader

通过Paint.setShader(Shader shader)来设置我们要显示图形的颜色.
通常我们并不直接使用Shader,而是使用它的子类来实现我们所需要实现的功能
它的子类:BitmapShader LinearGradient SweepGradient RadialGradient ComposeShader

TileMode

着色器平铺模式,一共有三种

  • TileMode.CLAMP : 拉伸
  • TileMode.REPEAT : 重复
  • TileMode.MIRROR : 镜像

BitmapShader(位图着色器)

  • 第一种情况:画图时边界小于等于位图的边界
String text = "Shader";
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.headimg);
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);//(1)
// BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);//(2)
// BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);//(3)
Paint paint = new Paint();
paint.setShader(bitmapShader);
// canvas.drawRect(0, 0, bitmap.getWidth(), bitmap.getHeight(), paint);
canvas.drawBitmap(bitmap,0,0,paint);


代码效果图:当Rect的边界为图片的边界时,无论使用哪种平铺方式页面显示的效果相同,都是讲bitmap完整显示在屏幕上,所以我们可以得出,如果Rect的边界小于图片的边界时,屏幕上就只显示图片的一部分(按照Rect的边界显示)

同时我们还可以使用canvas画多种形状的图形,这时可以把bitmap当成画布的背景:圆形头像,五角星图形,多边形,带弧度的矩形等

这里写图片描述
* 第二种情况,画图时Rect的边界超出位图的边界

String text = "Shader";
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.headimg);
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);//(1)
// BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);//(2)
// BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);//(3)
Paint paint = new Paint();
paint.setShader(bitmapShader);
// canvas.drawRect(0, 0, n*bitmap.getWidth(), n*bitmap.getHeight(), paint);

(1)在x,y方向 使用边缘拉伸模式会在图片在对应的x,y方向上将边缘的一个像素进行拉伸、扩展.(注意先在y方向上拉升,在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值