Canvas裁剪和Region、RegionIterator

主要是看这边文章学习:http://blog.csdn.net/lonelyroamer/article/details/8349601

Region.op参数

  1. DIFFERENCE(0), //最终区域为region1 与 region2不同的区域  
  2. INTERSECT(1), // 最终区域为region1 与 region2相交的区域  
  3. UNION(2),      //最终区域为region1 与 region2组合一起的区域  
  4. XOR(3),        //最终区域为region1 与 region2相交之外的区域  
  5. REVERSE_DIFFERENCE(4), //最终区域为region2 与 region1不同的区域  
  6. 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);
    }

}

效果:

//还不算详细,后面补

原文地址:https://www.cnblogs.com/androidsuperman/p/5679716.html