path BimapShader

来源:互联网 发布:淘宝二手iphone6s骗局 编辑:程序博客网 时间:2024/06/06 01:06

渲染 Shader:

BimapShader位图的图像渲染器

LinearGradient线性渲染

RadialGradient环形渲染

SweepGradient梯度渲染(扫描渲染)

ComposeShader组合渲染


利用bitmapshader我们可以实现圆形等一些列的不规则的突破

/** * TileMode.CLAMP 拉伸最后一个像素去铺满剩下的地方 * TileMode.MIRROR 通过镜像翻转铺满剩下的地方。 * TileMode.REPEAT 重复图片平铺整个画面(电脑设置壁纸) */

bitmapShader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);

可以利用矩阵对bitmrpshader实现平移  旋转  缩放等一些列操作
        width = bitmap.getWidth();        height = bitmap.getHeight();        paint = new Paint(Paint.ANTI_ALIAS_FLAG);        Matrix matrix = new Matrix();        matrix.setScale(bitmapRadius * 2.0f / width, bitmapRadius * 2.0f / height);        bitmapShader.setLocalMatrix(matrix);

最后设置shader
 paint.setShader(bitmapShader);

最后在ondraw中进行绘制
canvas.drawCircle(bitmapRadius, bitmapRadius, bitmapRadius, paint);

关于描边
        strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);        strokePaint.setColor(Color.RED);        strokePaint.setStrokeWidth(5);        strokePaint.setStyle(Paint.Style.STROKE);        canvas.drawCircle(bitmapRadius, bitmapRadius, bitmapRadius, strokePaint);


我们还可以利用shapeDrawable去实现圆形图片

        ShapeDrawable shapeDrawable = new ShapeDrawable(new OvalShape());        shapeDrawable.getPaint().setShader(bitmapShader);        shapeDrawable.setBounds(0, 0, bitmapRadius * 2, bitmapRadius * 2);        shapeDrawable.draw(canvas);

完整代码如下
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.RadialGradient;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.ShapeDrawable;import android.graphics.drawable.shapes.OvalShape;import android.view.View;/** * Created by qianxin on 16/11/24. */public class MyPathShader extends View {    private Bitmap bitmap;    private Paint paint;    private BitmapShader bitmapShader;    private int width;    private int height;    private int bitmapRadius = 100;    private Paint strokePaint;    private int[] colors = {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW};    private RadialGradient radialGradient;    public MyPathShader(Context context) {        super(context);        bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.zsh)).getBitmap();        strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);        strokePaint.setColor(Color.RED);        strokePaint.setStrokeWidth(5);        strokePaint.setStyle(Paint.Style.STROKE);        bitmapShader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);        width = bitmap.getWidth();        height = bitmap.getHeight();        paint = new Paint(Paint.ANTI_ALIAS_FLAG);        Matrix matrix = new Matrix();        matrix.setScale(bitmapRadius * 2.0f / width, bitmapRadius * 2.0f / height);        bitmapShader.setLocalMatrix(matrix);        //将图片根据控件的尺寸进行缩放        paint.setShader(bitmapShader);    }    /**     * TileMode.CLAMP 拉伸最后一个像素去铺满剩下的地方     * TileMode.MIRROR 通过镜像翻转铺满剩下的地方。     * TileMode.REPEAT 重复图片平铺整个画面(电脑设置壁纸)     */    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawColor(Color.WHITE);         canvas.drawCircle(bitmapRadius, bitmapRadius, bitmapRadius, paint);        canvas.drawCircle(bitmapRadius, bitmapRadius, bitmapRadius, strokePaint);        //用shapeDrawable也可以实现        ShapeDrawable shapeDrawable = new ShapeDrawable(new OvalShape());        shapeDrawable.getPaint().setShader(bitmapShader);        shapeDrawable.setBounds(0, 0, bitmapRadius * 2, bitmapRadius * 2);        shapeDrawable.draw(canvas);        canvas.drawCircle(bitmapRadius, bitmapRadius, bitmapRadius, strokePaint);        radialGradient = new RadialGradient(300, 300, 50, colors, null, Shader.TileMode.MIRROR);        paint.setShader(radialGradient);        canvas.drawCircle(300, 300, 150, paint);    }}



0 0
原创粉丝点击