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

效果:

//还不算详细,后面补

Canvas裁剪和Region、RegionIterator的更多相关文章

  1. Canvas裁剪Clip和Region、RegionIterator

    extends:http://blog.csdn.net/lonelyroamer/article/details/8349601 裁剪功能由Canvas提供的一系列的clip...方法 和quick ...

  2. Android 2D Graphics学习 Region和Canvas裁剪

    1.首先介绍Region类 Region,中文意思即区域的意思,它表示的是canvas图层上的某一块封闭的区域. /**构造方法*/ public Region()  //创建一个空的区域 publi ...

  3. 【原创】canvas裁剪上传图片异步提交

    <!DOCTYPE html> canvas裁剪图片,纯前端 裁剪文件 后台返回获取裁剪后的文件

  4. html5 canvas裁剪区域

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 利用canvas裁剪想要的图片

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 小程序踩坑记录-上传图片及canvas裁剪图片后上传至服务器

    最近在写微信小程序的上传图片功能,趟过了一些坑记录一下. 想要满足的需求是,从手机端上传图片至服务器,为了避免图片过大影响传输效率,需要把图片裁剪至适当大小后再传输 主要思路是,通过wx.choose ...

  7. 用canvas裁剪图片

    var selectObj = null; function ImageCrop(canvasId, imageSource, x, y, width, height) { var canvas = ...

  8. canvas裁剪之后的base64转换为上传文件blob对象

    function convertBase64UrlToBlob(urlData){ var bytes=window.atob(urlData.split(',')[1]); //去掉url的头,并转 ...

  9. android Graphics(三):区域(Range)

    前言:最近几天对画图的研究有些缓慢,项目开始写代码了,只能在晚上空闲的时候捯饬一下自己的东西,今天给大家讲讲区域的相关知识,已经想好后面两篇的内容了,这几天有时间赶紧写出来给大家.有关界面开发的东东内 ...

随机推荐

  1. 【xcode插件介绍】Alcatraz ----The package manager for Xcode

    对于许多iOS开发者而言,Alcatraz并不陌生,甚至是相当的喜闻乐见.Alcatraz是一款开源的Xcode包管理器,由Marin Usalj.Delisa Mason和Jurre Stender ...

  2. Coursera台大机器学习基础课程1

    Coursera台大机器学习基础课程学习笔记 -- 1 最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一 机器学习是什么? 感觉和 Tom M. Mitche ...

  3. 字符串匹配算法 之 基于DFA(确定性有限自动机)

    确定有限自动机定义:http://en.wikipedia.org/wiki/Deterministic_finite_automaton 自动机在字符串匹配中的应用 #include<stdi ...

  4. Bootstrap3入门

    Bootstrap3学习第一轮(入门) 前言 在上一节中http://www.cnblogs.com/aehyok/p/3381651.html主要是简单的介绍了一下Bootstrap.从http:/ ...

  5. ruby gsub gsub! chomp chomp! 以及所有类似函数用法及区别

    ruby中带“!"和不带"!"的方法的最大的区别就是带”!"的会改变调用对象本身了.比方说str.gsub(/a/, 'b'),不会改变str本身,只会返回一个 ...

  6. wp7之换肤原理简单分析

    wp7之换肤原理简单分析 纠结很久...感觉勉强过得去啦.还望各位大牛指点江山 百度找到这篇参考文章http://www.cnblogs.com/sonyye/archive/2012/03/12/2 ...

  7. git的初步使用---本地代码库的使用和提交

    git的初步使用---本地代码库的使用和提交 git是一个好东西,但对于新手来说,这个工具并不好使用,因为它里面涉及到很多东西,而这些东西新手一时间是无法理解的.不幸的是,本人就是新手一枚,所以,这里 ...

  8. MongoDb注意事项

    1.保证足够大的内存. 2.Mongodb跟mysql一样,对于常用的查询条件,该建索引的建索引.不要认为内存够用,数据就会在内存,有时,内存够用,数据也不一定在内存. 3.使用副本集,一个主库,进行 ...

  9. 嵌入式Linux学习(二)

    嵌入式系统和通用计算机的主要区别 嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统. 嵌入式系统主要由嵌入式微处理器 ...

  10. mini2440裸机之I2C

    // File Name : IIC.c // Function  : S3C2440 IIC-bus Master Tx/Rx mode Test Program //             (I ...