shader渲染器(BitmapShader 、LinearGradient 、RadialGradient )简单介绍

shader 渲染器,有如下四中渲染器
* BitmapShader 位图渲染器
* ComposeShader 组合渲染器
* LinearGradient 线性渲染器
* RadialGradient 环形渲染器
* SweepGradient 梯度渲染器
官方文档介绍如下
Shader is the based class for objects that return horizontal spans of colors during drawing. A subclass of Shader is installed in a Paint calling paint.setShader(shader). After that any object (other than a bitmap) that is drawn with that paint will get its color(s) from the shader.
这段话有几个重点:
1,怎么使用,shader是给paint使用的,paint.setShaer(shader);
2.shader不仅仅是渲染bitmap,还能渲染其他的,比如文字
备注:个人感觉只要paint能画的都能渲染
3.返回水平空白方向的渲染颜色

接下来介绍bitmapshader,shader有三种渲染方式
这个是原图这里写图片描述

  bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.shader)).getBitmap();
        int height = bitmap.getHeight();
        int width = bitmap.getWidth();
        offset = (int) (Math.min(width, height) * 1.7f);
  /**
         *  bitmap 要渲染的图片
         * @param tileX  x轴的渲染模式
         * @param tileY  y轴的渲染模式
         * 总共有三种渲染模式,xy方向可以混合使用
         * Shader.TileMode.CLAMP  最外面的色素平铺填充空白
         * Shader.TileMode.MIRROR bitmap为单位镜像填充空白
         * Shader.TileMode.REPEAT bitmap为单位复制填充空白
         */
        BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

        paint.setShader(shader);
       canvas.drawRect(new Rect(centerX - offset, centerY -offset,centerX+offset,centerY+offset),paint);

左上角是原图,其他空白区域的效果是渲染出来的
第一种CLAMP 方式的效果:
这里写图片描述

第二种MIRROR 的效果
这里写图片描述

第三种 REPEAT 效果如下:
这里写图片描述

是不是看起来和windows桌面壁纸设置的效果一样的。
用处也很常见的,比如圆形头像,截取外接圆的留下的空白就用bitmapShader去平铺渲染.

接着是线性渲染器LinearGradient 的实例效果,最经典的是windows画板自带的调色板
这里写图片描述

   /**
         * 线性渲染器的使用
         @param x0   起点
         @param y0
         @param x1   终点
         @param y1
         @param  colors   线性渐变的颜色
         @param  positions  可以为空,每个颜色占据矩形色块的宽度或者长度,为空是均分
         @param  tile        渲染模式三种,平铺、拉伸、镜像
         */
        int[] color=new int[]{Color.BLUE,Color.BLACK,Color.YELLOW,Color.GREEN,Color.DKGRAY};
        LinearGradient linearGradient=new LinearGradient(0,0,450,450,color,null, Shader.TileMode.CLAMP);
        paint.setShader(linearGradient);
        paint.setAntiAlias(true);
        canvas.drawRect(0,0,450,450,paint);

这里写图片描述

下面是圆形渲染器的使用

     /**
         * /** Create a shader that draws a radial gradient given the center and radius.
         @param centerX  中心点
         @param centerY  中心点
         @param radius   半径,必须是正数
         @param colors   圆形色轮的颜色
         @param stops    和线性的一样
         @param tileMode The Shader tiling mode
         */
        int [] color1=new int[]{Color.RED,Color.BLUE};
        RadialGradient radialGradient=new RadialGradient(450,450, 400,color1,null, Shader.TileMode.CLAMP);
        Paint paint1=new Paint();
        paint1.setAntiAlias(true);
        paint1.setShader(radialGradient);
        canvas.drawRect(0,0,450,450,paint1);

怎么感觉看起来像是日晕呢?
这里写图片描述

改变颜色种类之后效果如下:
这里写图片描述

这里面有一个渐变融合过渡的效果,颜色少看起来是很帅的。

线性的渲染器很多app都用到了,比如酷狗的歌词,比如今日头条的字体渲染显示刷新效果。
那上面到底有么有坑呢?肯定是有的,渲染器至少要求2种颜色以上。
后面的几种渲染器用法差不多,大同小异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值