Shader

setShader( Shader mShader)  是Paint 的一个api。他主要是通过 Shader 的子类 实现一种着色的效果(给paint 设置一种绘图策略,类似于 颜色,阴影等)。

 BitmapShader

 public BitmapShader(Bimap bimap,TitleMode modeX,TitleMode modeY);

 modeX:当View的宽度,大于bitmap 的宽度时,bitmap 在横轴方向的排版方式。

 modeY:当View的高度,大于bitmap 的高度时,bitmap在纵轴方向的排版方式。

public enum TileMode {
        //边缘色彩填充多余空间
        CLAMP   (0),
        //重复使用原图来填充多余空间
        REPEAT  (1),
        //重复使用镜像模式填充多余空间
        MIRROR  (2)
       
    }

 效果:

    a.modeX ,modeY 都为 Repeat (重复)模式

b.modeX ,modeY 都为 Mirror(镜像) 模式

 c.modeX,modeY 都为 Clamp(拉升) 模式(先竖向填充,然后横向填充)

注意:modeX,modeY 可以使用不同模式,组合使用

如果bitmap的尺寸大于 View 的尺寸呢?当然重复填充模式肯定会无用,那到底会怎样显示呢?

 效果:类似于 首先将整张大图片绘制在canvas 上,然后截取了我们实际需要的尺寸   移步查看实战——  刮刮乐效果 

如果 在第一张效果(a)的基础上,我drawCircle 的半径变小,那效果又会怎样呢?

红色圆形区域,就是我们有开始例子的范围

总结:无论绘制多大图像,在哪里绘制都与Shader无关。Shader 永远是从控件的左上角开始,而我们绘制的只是显示出来的部分而已。

LinearGradient

1.public LinearGradient(float startX,float startY,float endX,flat endY ,int startColor,int endColor, TileMode tile);

2.public LinearGradient(float startX,float startY,float endX,flat endY ,int tileColor[ ],float position[ ] TileMode tile);

参数说明:

 (startX, startY)——起始渐变点坐标

  (endX,endY)——终止渐变点坐标

     statColor ——其实颜色(0xAARRGGBB 16进制形式表示,透明度不能少

     endColor ——其实颜色(0xAARRGGBB 16进制形式表示,透明度不能少

      tileColor[ ]——渐变颜色数组(0xAARRGGBB 16进制形式表示,透明度不能少

      positions[ ]——与 titleColor[ ]对应,取值0~1 ,表示每种颜色在整条渐变线中的占比。

 RadialGradient  

是shader的一种派生类,主要表现形式,类似于从一点发散的效果

1.public RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor,  TileMode tileMode) ;

2.public RadialGradient(float centerX, float centerY, float radius, colors[], float stops[], TileMode tileMode)

参数说明:

(centerX,CenterY)——渐变中心的坐标。

  radius——渐变半径。

  centerColor——渐变中心的颜色。(8位)

   edgeColor——渐变结束的颜色值。

  titleMode——填充模式。

   colors[]——渐变颜色组

  stops[] 表示colors[] 中的颜色,所占的百分比。

 以上效果的测试都没有贴代码,好像有点说不过去。下面撸个效果吧☺。

 

   @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int radius=getWidth()/3;
        RadialGradient mRadiaGradient=new RadialGradient(getWidth()/2,getHeight()/2,radius,
                0Xff00ff00,0xff0f00ff, Shader.TileMode.REPEAT);
        Paint mPaint=new Paint();
        mPaint.setShader(mRadiaGradient);
        canvas.drawRect(0,0,getWidth(),getHeight(),mPaint);
    }

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值