Android绘图基础之Shader


转载请注明出处:http://blog.csdn.net/crazy1235/article/details/74011243


Shader – 着色器

Shader 共有5个子类!

这里写图片描述

public Shader setShader(Shader shader) {
        // If mShader changes, cached value of native shader aren't valid, since
        // old shader's pointer may be reused by another shader allocation later
        if (mShader != shader) {
            mNativeShader = -1;
        }
        // Defer setting the shader natively until getNativeInstance() is called
        mShader = shader;
        return shader;
    }

下面分别来说一下这五种着色器!


BitmapShader

图片着色器

来看下BitmapShader的构造函数:

public BitmapShader(@NonNull Bitmap bitmap, TileMode tileX, TileMode tileY) {
        mBitmap = bitmap;
        mTileX = tileX;
        mTileY = tileY;
        init(nativeCreate(bitmap, tileX.nativeInt, tileY.nativeInt));
    }

第一个参数就是要处理的图片!

第二个和第三个参数表示贴图模式 – TileMode, 是一个枚举类型。

public enum TileMode {
        /**
         * 当图形尺寸大于bitmap尺寸时,用bitmap的边缘颜色进行填充剩余空间
         */
        CLAMP   (0),
        /**
         * 当要绘制的图形尺寸大于Bitmap尺寸时,会用Bitmap重复平铺整个绘制的区域 
         */
        REPEAT  (1),
        /**
         * 当绘制的图形尺寸大于Bitmap尺寸时,MIRROR模式下也会用Bitmap重复平铺整个绘图区域,与REPEAT不同的是,两个相邻的Bitmap互为镜像。 
         */
        MIRROR  (2);

        TileMode(int nativeInt) {
            this.nativeInt = nativeInt;
        }
        final int nativeInt;
    }

举例说明:

  • CLAMP + CLAMP
private Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.child);

private BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); // CLAMP + CLAMP
paint.setShader(bitmapShader);
canvas.drawRect(0, 0, bitmap.getWidth() * 2, bitmap.getHeight() * 2, paint);


  • REPEAT + REPEAT
private BitmapShader bitmapShader2 = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); // REPEAT + REPEAT

paint.setShader(bitmapShader2);
canvas.drawRect(0, 0, bitmap.getWidth() * 2.5F, bitmap.getHeight() * 2.5F, paint);


  • REPEAT + CLAMP
private BitmapShader bitmapShader2 = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.CLAMP); // REPEAT + CLAMP

paint.setShader(bitmapShader2);
canvas.drawRect(0, 0, bitmap.getWidth() * 2.5F, bitmap.getHeight() * 2.5F, paint);


  • MIRROR + MIRROR
private BitmapShader bitmapShader3 = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR); // MIRROR + MIRROR

paint.setShader(bitmapShader3);
canvas.drawRect(0, 0, bitmap.getWidth() * 2.5F, bitmap.getHeight() * 2.5F, paint);

上下左右都是镜像图片


  • MIRROR + REPEAT
private BitmapShader bitmapShader3 = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.REPEAT); // MIRROR + REPEAT

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值