可以使用ComposeShader将二者组合使用,基本代码如下所示:
ComposeShader composeShader = new ComposeShader(shaderA, shaderB, porterDuffMode); paint.setShader(composeShader); canvas.drawXXX(..., paint);上述代码等价于下面的代码片段:
canvas.saveLayer(left, top, right, bottom, null, Canvas.ALL_SAVE_FLAG); paint.setShader(shaderA); canvas.drawXXX(..., paint); paint.setXfermode(new PorterDuffXfermode(mode)); paint.setShader(shaderB); canvas.drawXXX(..., paint); paint.setXfermode(null); canvas.restore();此处所说的以上两个代码片段等价的前提是,两个代码片段中的canvas.drawXXX(…, paint)方法中调用的drawXXX方法相同,并且里面传入的参数都相同,例如我们之前两段心形代码示例中都调用drawRect()方法且绘制的矩形的位置及尺寸都相同。
总结本文依次介绍了Shader的五个子类:BitmapShader、LinearGradient、RadialGradient、SweepGradient和ComposeShader。并在最后对ComposeShader这个相对复杂的示例进行了讲解,如果大家能看明白最后ComposeShader这个示例,相信大家已经对Shader理解地比较透彻了。
关于LinearGradient、RadialGradient、SweepGradient这三个渐变效果Shader,大家也可以参考一下博文 《图文详解Andorid中用Shape定义GradientDrawable》 ,该文详细介绍了如何用XML中的 <shape> 节点定义各种具有渐变效果的GradientDrawable,这两篇博文可互为映照。
(责任编辑:最模板)