Paint画笔的基本使用——渲染

上一篇播客说了下paint画笔的基本使用,这里继续说下paint画笔的基本使用——渲染,paint画笔的渲染涉及到下面几种渲染方式:

BitmapShader  位图的图像渲染器
LinearGradient  线性渲染
RadialGradient  环形渲染
SweepGradient  梯度渲染(扫描渲染)
ComposeShader  组合渲染

BitmapShader 位图的图像渲染器
BitmapShader在使用的时候直接new一个就可以,根据需要传入参数;

/**  *
  * @param bitmap  对应的要渲染的bitmap位图
  * @param tileX   X轴对应的渲染模式
  * @param tileY   Y轴对应的要渲染的模式
  */
public BitmapShader(@NonNull Bitmap bitmap, TileMode tileX, TileMode tileY) {
    mBitmap = bitmap;
    mTileX = tileX;
    mTileY = tileY;
    init(nativeCreate(bitmap, tileX.nativeInt, tileY.nativeInt));
}

这里对应的模式有三种:

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

结合paint简单使用:

private void doShaderView(Canvas canvas){
    /**
     * TileMode.CLAMP 拉伸最后一个像素去铺满剩下的地方
     * TileMode.MIRROR 通过镜像翻转铺满剩下的地方。
     * TileMode.REPEAT 重复图片平铺整个画面(电脑设置壁纸)
     */
    BitmapShader bitmapShader=new BitmapShader(bitmap, Shader.TileMode.MIRROR,Shader.TileMode.MIRROR);
    mPaint.setShader(bitmapShader);
    canvas.drawRect(new Rect(0,0,bitmapWidth*2,bitmapHeight*2),mPaint);
}

这里写图片描述
(TileMode.MIRROR效果)

这里写图片描述
(TileMode.CLAMP效果)

这里写图片描述
(TileMode.REPEAT效果)

LinearGradient 线性渲染

/** Create a shader that draws a linear gradient along a line.
  @param x0           x起点
  @param y0           y起点
  @param x1           x终点
  @param y1           y终点
  @param  colors      渐变的颜色(数组)
  @param  positions   数组大小跟colors数组一样大,中间依次摆放的几个颜色分别放置在那个位置上(参考比例从左往右) 可以为空
  @param  tile        渐变的模式
 */
public LinearGradient(float x0, float y0, float x1, float y1, int colors[], float positions[],
    TileMode tile) {
    ...
}
/**
 * LinearGradient渲染
 * @param canvas
 */
private void doLinearGradient(Canvas canvas){
    LinearGradient linearGradient=new LinearGradient(0,0,600,600,colors,null, Shader.TileMode.MIRROR);
    mPaint.setShader(linearGradient);
    canvas.drawRect(0, 0, 400, 400, mPaint);
}

这里写图片描述


**RadialGradient  环形渲染**
/** 
  @param centerX      x中心点
  @param centerY      y中心点
  @param radius       半径
  @param  colors      渐变的颜色(数组)
  @param  positions   数组大小跟colors数组一样大,中间依次摆放的几个颜色分别放置在那个位置上(参考比例从左往右) 可以为空
  @param  tile        渐变的模式
 */
public RadialGradient(float centerX, float centerY, float radius, int colors[], float positions[],
    TileMode tile) {
    ...
}

这里写图片描述

SweepGradient 梯度渲染(扫描渲染)

/**
  * A subclass of Shader that draws a sweep gradient around a center point.
  *
  * @param cx       x中心点
  * @param cy       Y中心点
  * @param colors   渐变颜色(数组)
  * @param positions 渐变的位置(数组)  可以传空
  */
public SweepGradient(float cx, float cy,
        int colors[], float positions[]) {
        ...
}
/**
  * SweepGradient渲染
  * @param canvas
  */
private void doSweepGradient(Canvas canvas){
    SweepGradient sweepGradient=new SweepGradient(300,300,colors,null);
    mPaint.setShader(sweepGradient);
    canvas.drawCircle(300, 300, 300, mPaint);
}

这里写图片描述

ComposeShader 组合渲染

/** 
  @param shaderA  渲染类型A
  @param shaderB  渲染类型B
  @param mode     渲染模式
*/
public ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode) {
    mType = TYPE_PORTERDUFFMODE;
    mShaderA = shaderA;
    mShaderB = shaderB;
    mPorterDuffMode = mode;
    init(nativeCreate2(shaderA.getNativeInstance(), shaderB.getNativeInstance(),
        mode.nativeInt));
}
/**
 * ComposeShader  组合渲染
 */
private void doComposeShader(Canvas canvas){
    LinearGradient linearGradient=new LinearGradient(0,0,600,600,colors,null, Shader.TileMode.MIRROR);
    BitmapShader bitmapShader=new BitmapShader(bitmap, Shader.TileMode.REPEAT,Shader.TileMode.REPEAT);
    ComposeShader composeShader=new ComposeShader(linearGradient, bitmapShader, PorterDuff.Mode.SRC_OVER);
    mPaint.setShader(composeShader);
    canvas.drawRect(0, 0, 400, 600, mPaint);
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值