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开头的方法主要有两个:
还有一个已经废弃的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.OpOp是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.INTERSECT交集
取两次的交集
Region.Op.REPLACE第二次替代第一次裁切
第二次替代第一次裁切
Region.Op.UNION两次裁切的和
两次裁切的和
Region.Op.REVERSE_DIFFERENCE取第2次的非交集
与DIFFERENCE相反,取的第2次裁切的非交集区域