canvas教程

Android 自定义View学习(七)(4)

字号+ 作者:H5之家 来源:H5之家 2017-01-20 18:09 我要评论( )

Path.Direction.CCW 文字在路径内侧绘制,并且逆时针 draw系列方法中,有一个看起来很有意思的方法,drawTextRun方法,但这个方法最低要求的23 canvas.drawTextRun(chars,0,chars.length,0,chars.length,100f,100f,


Path.Direction.CCW

文字在路径内侧绘制,并且逆时针

draw系列方法中,有一个看起来很有意思的方法,drawTextRun方法,但这个方法最低要求的23

canvas.drawTextRun(chars,0,chars.length,0,chars.length,100f,100f,false,textPaint);

没有23的真机,就用了虚拟机,看方法名字,以为会按照一定的方法,文字进行滚动,可并没有,设置为false为abcde,设置为true为edcba,不清楚在真机上啥效果

加上在开始了解Canvas中的方法,draw大致就学习到这里

2.Clip方法学习

Clip开头的方法主要有两个:

  • clipPath() 利用Path的方法,可以裁切出一块不规则区域画布
  • clipRect() 可以裁切出一块矩形画布
  • 还有一个已经废弃的clipRegion(),废弃就不学了,直接学替代的方法

    2.1 clipRect裁切规则区域画布

    简单使用:

    private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Color.parseColor("#FF4081")); mPaint.setStyle(Paint.Style.FILL); //矩形 rectF = new RectF(0, 0, 400, 400); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); //绘制底色 黄 canvas.drawColor(Color.YELLOW); //截取画布 canvas.clipRect(rectF); //截取后的画布底色 canvas.drawColor(Color.CYAN); //验证有效区域 canvas.drawRect(300,300,600,600,mPaint); }


    drawRect方法

    clipRect(rectF),就是在在画布裁出以(0,0),(0,400),(400,0),(400,400)四个点确定的矩形。之后Canvas有效的区域便就是裁出的矩形区域,再次进行绘制时,超出这个区域便无法绘制,但裁切并不会影响c裁切前已经绘制好的区域,clip裁切针对的是Canvas

    cliprRect有这样一个cliprRect((@NonNull RectF rect, @NonNull Region.Op op)重载方法

    2.1.1 Region.Op

    Op是Region类中的一个枚举,有6个值

    直接用代码演示效果

    private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Color.WHITE); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(5f); //裁切区域1 rectF1 = new RectF(100, 100, 300, 300); //裁切区域2 rectF2 = new RectF(200, 200, 400, 400); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); //绘制底色 蓝 canvas.drawColor(Color.BLUE); canvas.save(); //截取画布1 canvas.clipRect(rectF1); //截取画布2 canvas.clipRect(rectF2,Region.Op.DIFFERENCE); //截取后的有效区域画布底色 canvas.drawColor(Color.RED); canvas.restore(); //绘制辅助区域 canvas.drawRect(rectF1, mPaint); canvas.drawRect(rectF2, mPaint); }

    红色区域就代表两次裁切后的有效区域

  • Region.Op.DIFFERENCE

  • Region.Op.DIFFERENCE第一次的非交集

    取第一次裁切的非交集部分

  • Region.Op.INTERSECT

  • Region.Op.INTERSECT交集

    取两次的交集

  • Region.Op.REPLACE

  • Region.Op.REPLACE第二次替代第一次裁切

    第二次替代第一次裁切

  • Region.Op.UNION

  • Region.Op.UNION两次裁切的和

    两次裁切的和

  • Region.Op.REVERSE_DIFFERENCE

  • Region.Op.REVERSE_DIFFERENCE取第2次的非交集

    与DIFFERENCE相反,取的第2次裁切的非交集区域

  • Region.Op.XOR
  •  

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Android开发之50个常见实用技巧——添加悦目的动画效果

      Android开发之50个常见实用技巧——添加悦目的动画效果

      2017-01-15 08:02

    • 用Shader实现特殊效果

      用Shader实现特殊效果

      2017-01-14 17:00

    • 8.1.2 setAlpha方法:设置透明度

      8.1.2 setAlpha方法:设置透明度

      2017-01-11 12:03

    • Android使用ImageView制作透明圆弧实例代码

      Android使用ImageView制作透明圆弧实例代码

      2017-01-10 09:00

    网友点评