博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Canvas裁剪和Region、RegionIterator
阅读量:6713 次
发布时间:2019-06-25

本文共 2897 字,大约阅读时间需要 9 分钟。

主要是看这边文章学习: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);    }}

效果:

//还不算详细,后面补

你可能感兴趣的文章
开发一对一直播系统您需要注意的内容
查看>>
开源|ns4_frame分布式服务框架开发指南
查看>>
用Vue封装Swiper实现图片轮播很简单
查看>>
Android Sensor源码分析总结
查看>>
(基础系列)object clone 的用法、原理和用途
查看>>
图片 文件 转base64
查看>>
Spring Cloud分布式微服务云架构集成项目
查看>>
springmvc整合dubbo
查看>>
函数防抖
查看>>
2月阅读书单及推荐(前端)
查看>>
面试中并发类问题的准备和学习
查看>>
Vuex源码学习(四)module与moduleCollection
查看>>
python基础总结 Part.1
查看>>
【OC梳理】description
查看>>
一篇不太一样的RxJava介绍(二):关于操作符背后的故事
查看>>
FFmpeg模块介绍
查看>>
张家口a货翡翠,梧州a货翡翠
查看>>
JS Object的静态方法汇总( 上 )
查看>>
到手机里面去点击信任就行了。每次都是这样出错。
查看>>
java B2B2C Springcloud多租户电子商城系统-Eureka服务端与客户端常用配置
查看>>