您的位置:首页 > 其它

Canvas裁剪和Region、RegionIterator

2016-07-17 23:16 211 查看
主要是看这边文章学习:http://blog.csdn.net/lonelyroamer/article/details/8349601

Region.op参数

DIFFERENCE(0), //最终区域为region1 与 region2不同的区域

INTERSECT(1), // 最终区域为region1 与 region2相交的区域

UNION(2), //最终区域为region1 与 region2组合一起的区域

XOR(3), //最终区域为region1 与 region2相交之外的区域

REVERSE_DIFFERENCE(4), //最终区域为region2 与 region1不同的区域

REPLACE(5); //最终区域为为region2的区域

Canvas裁剪相关方法:

1、最基本的clipRect,裁剪一个矩形

2、clipPath,裁剪Path包括的范围,Path所包括的范围不是空的才有效。

3、clipRegion。

public class CustomView extends View {
private Context context;
// 画笔变量,必创建
private Paint paint;
private Path path;

public CustomView(Context context) {
super(context);
this.context = context;
initView();
}

public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context = context;
initView();
}

public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initView();
}

private void initView() {
paint = new Paint();
// 抗锯齿
paint.setAntiAlias(true);
paint.setTextSize(6);
// 绘制文字的位置
// Paint.Align.CENTER
// Paint.Align.LEFT
// Paint.Align.LEFT
paint.setTextAlign(Paint.Align.RIGHT);

path = new Path();
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 設置畫布顏色
canvas.drawColor(Color.YELLOW);
// 具体讲解:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0304/960.html
// save:用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。
// restore:用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。
canvas.save();
// 画布进行水平移动
canvas.translate(10, 10);
drawScene(canvas);
canvas.restore();

// 开始裁剪操作

// 首先保存画布状态
canvas.save();
canvas.translate(160, 10);
canvas.clipRect(20, 20, 100, 100);

// Region,中文意思即区域的意思,它表示的是canvas图层上的某一块封闭的区域。
// 参考http://blog.csdn.net/lonelyroamer/article/details/8349601
// Region.Op.INTERSECT
// Region.Op.REPLACE
// Region.Op.REVERSE_DIFFERENCE
// Region.Op.UNION
// Region.Op.XOR
// Region.Op.DIFFERENCE
canvas.clipRect(40, 40, 80, 80, Region.Op.DIFFERENCE);
drawScene(canvas);
}

private void drawScene(Canvas canvas) {
// 绘制矩形 0,0左上角,100,100右下角
canvas.clipRect(0, 0, 100, 100);
// 画布颜色为白色
canvas.drawColor(Color.WHITE);
// 画笔为红色
paint.setColor(Color.RED);
// 绘制线条,从矩形左上角绘制到矩形右下角
canvas.drawLine(0, 0, 100, 100, paint);
// 画笔颜色为绿色
paint.setColor(Color.GREEN);
// 画圆,中心点,30,70,半径30
canvas.drawCircle(30, 70, 30, paint);
// 画笔为蓝色
paint.setColor(Color.BLUE);
// 绘制文字,文字坐标100,30
canvas.drawText("Clipping", 100, 30, paint);
}

}


效果:



//还不算详细,后面补
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: