canvas剪裁(一)
来源:互联网 发布:web二手交易网站源码 编辑:程序博客网 时间:2024/05/18 01:12
网上有很多这样的demo,但是在最初调试的时候显示总是不对,后来修改了<uses-sdk android:minSdkVersion="13" /> 以后才可以 (<13也可以)
package com.test.canvas.clip;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.Region;import android.util.AttributeSet;import android.view.View;public class TestView extends View {private Paint mPaint = new Paint();public TestView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);drawBg(canvas);drawDiff(canvas);drawReplace(canvas);drawUnion(canvas);drawXor(canvas);drawReverse(canvas);drawIntersect(canvas);}//背景private void drawScene(Canvas canvas) {canvas.clipRect(0, 0, 100, 100);canvas.drawColor(Color.WHITE);mPaint.setColor(Color.RED);canvas.drawLine(0, 0, 100, 100, mPaint);mPaint.setColor(Color.GREEN);canvas.drawCircle(30, 70, 30, mPaint);mPaint.setColor(Color.BLUE);canvas.drawText("Clipping", 50, 50, mPaint);}//背景private void drawBg(Canvas canvas){canvas.save();canvas.translate(10,10);drawScene(canvas);canvas.restore();}//相减private void drawDiff(Canvas canvas){canvas.save();canvas.translate(160, 10);canvas.clipRect(0, 0, 60, 60);canvas.clipRect(40, 40, 100, 100, Region.Op.DIFFERENCE);drawScene(canvas);canvas.restore();}//取代private void drawReplace(Canvas canvas){Path path = new Path();canvas.save();canvas.translate(10, 160);path.reset();canvas.clipPath(path); // makes the clip emptypath.addCircle(50, 50, 50, Path.Direction.CCW);canvas.clipPath(path, Region.Op.REPLACE);drawScene(canvas);canvas.restore();canvas.save();canvas.translate(10, 160);canvas.clipRect(0, 0, 60, 60);canvas.clipRect(40, 40, 100, 100, Region.Op.REPLACE);drawScene(canvas);canvas.restore();}//并集private void drawUnion(Canvas canvas){canvas.save();canvas.translate(160, 160);canvas.clipRect(0, 0, 60, 60);canvas.clipRect(40, 40, 100, 100, Region.Op.UNION);drawScene(canvas);canvas.restore();}//存异去同XORprivate void drawXor(Canvas canvas){canvas.save();canvas.translate(10, 310);canvas.clipRect(0, 0, 60, 60);canvas.clipRect(40, 40, 100, 100, Region.Op.XOR);drawScene(canvas);canvas.restore();}//Difference的相反运算,将后画的部分中去掉先前的部分private void drawReverse(Canvas canvas){canvas.save();canvas.translate(160, 310);canvas.clipRect(0, 0, 60, 60);canvas.clipRect(40, 40, 100, 100,Region.Op.REVERSE_DIFFERENCE);drawScene(canvas);canvas.restore();//canvas.save();//canvas.translate(160, 310);//canvas.clipRect(0, 0, 60, 60);//canvas.clipRect(40, 40, 100, 100,//Region.Op.INTERSECT);//drawScene(canvas);//canvas.restore();}//交集private void drawIntersect(Canvas canvas){canvas.save();canvas.translate(10, 460);canvas.clipRect(0, 0, 60, 60);canvas.clipRect(40, 40, 100, 100,Region.Op.INTERSECT);drawScene(canvas);canvas.restore();}}
效果如下:
http://
源码下载:
http://pan.baidu.com/s/1hq5NfyW
假设:区域A,区域B
先裁剪A,再裁剪B(带参数)
Path pAPath pBCanvas.clip(pA);Canvas.clip(pB, Region.Op...);/*Region.Op... 参数说明: Region.Op.DIFFERENCE -- 得到的区域 ->在A中,与B不相同的部分 Region.Op.REVERSE_DIFFERENCE-- 得到的区域 ->在B中,与A不相同的部分 Region.Op.INTERSECT -- 得到的区域 ->A与B相同的部分(交集)Region.Op.XOR -- 得到的区域 ->不包含A与B相同的部分(全集减去交集) Region.Op.UNION -- 得到的区域 ->A与B的所有部分(全集) Region.Op.REPLACE -- 得到的区域 ->将A的区域用B替换*/
参考网页:http://blog.csdn.net/jason_wks/article/details/8199096
参考网页:http://blog.csdn.net/smilekai0908/article/details/7771261
0 0
- canvas剪裁(一)
- Canvas剪裁
- canvas图片上传剪裁
- canvas学习(一)
- canvas 学习(一)
- canvas 详解(一)
- canvas绘图(一)
- canvas学习笔记(一)-认识canvas
- 剪裁Onvif:减小soapC.cpp文件的大小(一)
- Canvas简单使用(一)
- Canvas简单使用(一)
- html5 canvas 线(一)
- Canvas绘制图形(一)
- canvas绘画饼状图(一)
- HTML5- Canvas入门(一)
- HTML5 canvas画布(一)
- Android Canvas详解(一)
- HTML5 之 Canvas (一)
- 故乡的雪
- 10720Graph Construction(Havel-Hakimi定理 )
- Strapdown Inertial Navigation System --《惯性技术(国防工业大学出版社)》读书笔记(2)
- 深入剖析Java内存分配、管理
- Chrome 查看和调试js代码
- canvas剪裁(一)
- Table对象的方法
- Spring MVC 3.2 技术预览(一):Servlet 3介绍,异步支持
- 简单模式匹配算法和KMP模式匹配算法
- jvm_bind问题解决
- 一个简单的弹出div,div里是一个表格
- CGLib 动态代理 及与JDK动态代理的不同
- appstore更新应用
- Hibernate 所有缓存机制详解