ComposeShader混合渲染

来源:互联网 发布:周杰伦secret知乎 编辑:程序博客网 时间:2024/06/09 17:21
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.view.View;/** * @version 2012-8-14 上午10:45:28 **/public class ComposeGameView extends View implements Runnable {    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 ComposeGameView(Context context) {        super(context);        // 装载资源        mBitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.abc))                .getBitmap();        // 得到宽高        bitwidth = mBitmap.getWidth();        bitheight = mBitmap.getHeight();        // 创建BitmapShader对象        mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT,                Shader.TileMode.MIRROR);        // 创建LinearGradient并设置渐变颜色数组        mLinearGradient = new LinearGradient(0, 0, 0, 100, new int[] {                Color.RED, Color.GREEN, Color.BLUE, Color.WHITE }, null,                Shader.TileMode.MIRROR);        // 混合渲染 将两个效果叠加        mComposeShader = new ComposeShader(mBitmapShader, mLinearGradient,                PorterDuff.Mode.LIGHTEN);        mPaint = new Paint();        new Thread(this).start();    }    @Override    protected void onDraw(Canvas canvas) {        // 绘制混合渲染效果        mPaint.setShader(mComposeShader);        canvas.drawRect(0, 0, bitwidth + 300, bitheight + 300, mPaint);    }    @Override    public void run() {        while(!Thread.currentThread().isInterrupted()) {            try {                Thread.sleep(100);            }            catch(Exception e) {                Thread.currentThread().interrupt();            }            postInvalidate();        }    }}
 PorterDuff.Mode

原创粉丝点击