Android高级UI开发(四十四)canvas基本知识(2) 裁剪与区域
【摘要】 裁剪:
裁剪后,canvas只能在裁剪出的这块rectF矩形上进行绘制。
区域:
canvas图层上的一块封闭区域,如下rect2这个矩形区域,drawRegion绘制出这个区域。
package com.xiaowei.lsn7_canvas; import android.content.Context;import android.graphics.B...
裁剪:
裁剪后,canvas只能在裁剪出的这块rectF矩形上进行绘制。
区域:
canvas图层上的一块封闭区域,如下rect2这个矩形区域,drawRegion绘制出这个区域。
-
package com.xiaowei.lsn7_canvas;
-
-
import android.content.Context;
-
import android.graphics.Bitmap;
-
import android.graphics.Canvas;
-
import android.graphics.Color;
-
import android.graphics.Paint;
-
import android.graphics.Path;
-
import android.graphics.Rect;
-
import android.graphics.RectF;
-
import android.graphics.Region;
-
import android.graphics.RegionIterator;
-
import android.graphics.drawable.BitmapDrawable;
-
import android.util.AttributeSet;
-
import android.view.View;
-
-
/**
-
* Created by xiaowei on 2019/5/14.
-
*/
-
-
public class MyView3 extends View {
-
private Bitmap mBitmap;
-
public MyView3(Context context) {
-
this(context,null);
-
}
-
-
public MyView3(Context context, AttributeSet attrs) {
-
super(context, attrs);
-
mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.xyjy2)).getBitmap();
-
-
}
-
-
@Override
-
protected void onDraw(Canvas canvas) {
-
super.onDraw(canvas);
-
-
//step1. 裁剪画布练习:裁剪一个矩形路径,并在这个矩形里绘制绿色。
-
Paint paint = new Paint();
-
paint.setColor(Color.WHITE);
-
//裁剪
-
//没有裁剪前,绿色对整个画布,即整个屏幕染色。
-
canvas.drawColor(Color.GREEN);
-
//裁剪一块矩形 rectF
-
RectF rectF = new RectF(100,100,400,400);
-
Path path = new Path();
-
path.addRect(rectF, Path.Direction.CCW);
-
canvas.save();
-
canvas.clipPath(path);
-
//裁剪后,红色只能对裁剪出的这块rectF矩形范围内着色。
-
canvas.drawColor(Color.RED);
-
-
//step2. 区域画布练习:创建一个矩形区域,并用白色画笔画出这个矩形Region区域
-
-
//区域:canvas图层上的一块封闭区域,如下rect2这个矩形区域,drawRegion绘制出这个区域。
-
canvas.restore();//恢复到裁剪前的画布,所以一下rect2的x坐标为0是从整个屏幕左上角开始,并非是上面裁剪矩形path的左上角。
-
paint.setStyle(Paint.Style.FILL);
-
Rect rect2 = new Rect(0,800,100,900);
-
Region region = new Region(rect2);
-
drawRegion(canvas,region,paint);
-
-
}
-
-
private void drawRegion(Canvas canvas,Region rgn,Paint paint)
-
{
-
RegionIterator iter = new RegionIterator(rgn);
-
Rect r = new Rect();
-
while (iter.next(r)) {
-
canvas.drawRect(r, paint);
-
}
-
}
-
-
}
文章来源: blog.csdn.net,作者:冉航--小虾米,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/gaoxiaoweiandy/article/details/105840550
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)