Android 颜色渲染(十) ComposeShader组合渲染
Android 颜色处理(十) ComposeShader组合渲染
Xfermode及ProterBuff.Mode具体含义见上一篇:
Android 颜色渲染(八) PorterDuff及Xfermode详解
ComposeShader,和AnimationSet的用法相似.是可以将两种颜色渲染器的效果进行组合:
以上图像由BimtmapShader和LinearGradient两种效果组合绘制,其中位图渲染 平铺模式使用的为镜像模式, 组合渲染使用了ProterDuff叠加模式,具体见如下代码:
MainActivity:
package com.tony.testshader;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.ComposeShader;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.ShapeDrawable;import android.util.AttributeSet;import android.view.View;public class ComposeShaderView extends View {Bitmap mBitmap = null;int bitwidth = 0;int bitheight = 0;Paint mPaint = null;// bitmap渲染Shader mBitmapShader = null;// 线性渐变渲染Shader mLinearGradient = null;// 混合渲染Shader mComposeShader = null;ShapeDrawable mShapeDrawable = null;public ComposeShaderView(Context context) {super(context);// 装载资源 mBitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.list_top)) .getBitmap(); // 得到宽高 bitwidth = mBitmap.getWidth(); bitheight = mBitmap.getHeight(); // 创建BitmapShader对象 mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR); // 创建LinearGradient并设置渐变颜色数组,平铺效果为镜像 mLinearGradient = new LinearGradient(0, 0, 0, 100, new int[] { Color.WHITE, Color.LTGRAY, Color.TRANSPARENT, Color.GREEN }, null, Shader.TileMode.MIRROR); // 混合渲染 将两个效果叠加,使用PorterDuff叠加模式 mComposeShader = new ComposeShader(mBitmapShader, mLinearGradient, PorterDuff.Mode.MULTIPLY); mPaint = new Paint(); }public ComposeShaderView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas); // 绘制混合渲染效果 mPaint.setShader(mComposeShader); canvas.drawCircle(240, 360, 200, mPaint);}}