android canvas的阴影绘制Shader

本文介绍如何在Android中使用Shader为Canvas添加阴影效果,特别是RadialGradient的使用方法。通过实例代码解释Shader的参数设置,如颜色分布、TileMode等,并提及其他可用的Shader类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android Shader阴影绘制类的使用方法及说明

http://blog.youkuaiyun.com/dinko321/article/details/6715290
这是我在网上找到的,某位前辈写的,我就是通过它来完成对Shader的了解

首先新建一个类继承自View

随后重写onDraw方法,如下:
java
@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);


Paint paint=new Paint(); //定义一个Paint

paint.setAntiAlias(true); //消除锯齿

 Shader mShader = new RadialGradient(300,300,122,

 new int[]{Color.argb(100,0x00,0x00,0x00),Color.argb(0,0xff,0xff,0xff)},

 new float[]{0.9f,1f},

 Shader.TileMode.MIRROR);

 paint.setShader(mShader); //将实例化且设置好的Shader传入paint

 Paint m = new Paint();


 m.setAntiAlias(true);


 m.setColor(Color.rgb(0x00,0xdd,0xff));


 canvas.drawCircle(300,300,110,m); //这里绘制出来一个比渐变圆略小的圆,并且覆盖到渐变圆上


 }

现在开始我们来逐行分析代码

Shader mShader = new RadialGradient(300,300,122, //三个数字分别表示,圆心的X、Y轴坐标以及半径

new int[]{Color.argb(100,0x00,0x00,0x00),Color.argb(0,0xff,0xff,0xff)}, //这里是用来设置颜色值的,在这个int数组内可以有N组Color值,也可以只有两个(目测最少也是两个)

new float[]{0.9f,1f}, //这个float数组用来设置色彩的分布情况,比如上面设置了两个颜色,那么这两种颜色怎么分布呢?这里设置的{0.9f,1.0f}就是说从距离圆心90%半径距离开始到100%半径结束,在这一段距离内均匀的渐变,那么从圆心开始到90%半径内,都将由上一个参数的第一个颜色来填充(如果不能理解这段话,可以把上面例子中最后一行代码删掉,然后在运行一次看看)

Shader.TileMode.MIRROR); //这里是一个传入一个静态参数。一共可以传入三个参数分别是CLAMP、MIRROR、REPEAT
图1

首先声明一下,我的英语水平是很渣的。。。我只能按照自己的理解和翻译器给出的意思作出粗略的分析。(大神别喷)
CLAMP:从字面上看的意思应该是,如果在Shader绘制的时候超出了边界,就会复制边缘色彩。
MIRROR:重复着在水平和垂直方向上继续绘制,两条被重复绘制图像的中间会有一道清晰的边界。
REPEAT:重复着在水平和垂直方向上继续绘制。

在本例子中我使用了MIRROR,原因是我试过各个参数之后,发现MIRROR最适合我的需求,所以各位,如果需要使用的时候可以先一个个试哈哈哈

楼上例子是关于RadialGradient的。。。但是android还提供了其他的几个阴影类
bitmapShader         位图平铺
linearGradient         线性渐变
radialGradient         圆形渐变 //讲过了
sweepGradient       角度渐变
composeShader    组合效果(组合以上几种)

之后的时间我会继续更新其它几个类。。。大家有兴趣的话也可以自己去查查API

这个是我自己做的一个项目(目标是做一个项目快速搭建框架)
里面有我自己做的很多小例子,有兴趣也可以看看嘿嘿嘿
https://github.com/XingSpace/XFramework

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值