转自:https://blog.csdn.net/gaomatrix/article/details/6532144


[java] view plain copy
public class Clipping extends Activity {  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(new SampleView(this));  }  private static class SampleView extends View {  private Paint mPaint;  private Path mPath;  public SampleView(Context context) {  super(context);  setFocusable(true);  mPaint = new Paint();  mPaint.setAntiAlias(true);  mPaint.setStrokeWidth(6);  mPaint.setTextSize(16);  mPaint.setTextAlign(Paint.Align.RIGHT);  mPath = new Path();  }  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", 100, 30, mPaint);  }  @Override protected void onDraw(Canvas canvas) {  canvas.drawColor(Color.GRAY);              canvas.save();  canvas.translate(10, 10);  drawScene(canvas);  canvas.restore();  canvas.save();  canvas.translate(160, 10);  canvas.clipRect(10, 10, 90, 90);  canvas.clipRect(30, 30, 70, 70, Region.Op.DIFFERENCE);  drawScene(canvas);  canvas.restore();  canvas.save();  canvas.translate(10, 160);  mPath.reset();  canvas.clipPath(mPath); // makes the clip empty  mPath.addCircle(50, 50, 50, Path.Direction.CCW);  canvas.clipPath(mPath, Region.Op.REPLACE);  drawScene(canvas);  canvas.restore();  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();  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();  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();  }  }
}  

//DIFFERENCE是第一次不同于第二次的部分显示出来 
//REPLACE是显示第二次的 
//REVERSE_DIFFERENCE 是第二次不同于第一次的部分显示

//INTERSECT交集显示 
//UNION全部显示 
//XOR补集 就是全集的减去交集生育部分显示

canvas.translate(float dx, float dy)方法的解释:

和j2me的translate用法一样,作用就是移动原点,默认的原点(0,0)是在屏幕左上角的,你可以通过translate(x,y)把点(x,y)作为原点

Canvas提供了ClipPath, ClipRect, ClipRegion 等方法来裁剪,通过Path, Rect ,Region 的不同组合,Android几乎可以支持任意现状的裁剪区域。

android.graphics包中定义了Point, Rect, Path, Region 这几种几何形状,Path可以为有圆弧,椭圆,二次曲线,三次曲线,线段,矩形等基本几何图形或是由这些基本几何图形组合而成,Path可以为开放或是闭合曲线。Rect提供了定义矩形的简洁方法。Region则支持通过区域的“加”,“减”,“并”,“异或”等逻辑运算由多个Region组合而成。Region.Op定义了Region支持的区域间运算种类。

Clipping 介绍有Region运算来为Canvs定义剪裁区域后,同一幅图最后显示的效果。canvas.save();和canvas.restore();用于保存和恢复Canvas的状态属性。

Android Clipping相关推荐

  1. Android clippling使用

    Android clipping Clipping 在Android中如果多个view嵌套的会引起overdraw,很多时候一些view被覆盖了,对用户是不可见的,但是依然会进行绘制,这个时候使用cl ...

  2. Android 5.X 新特性详解(一)MD主题、Palette、视图阴影、Tinting(着色)和Clipping(裁剪)

    Android 5.X系列使用新的MaterialDesign设计风格,这次的MaterialDesign设计将Android带到了一个全新的高度. Material Design 主题 Materi ...

  3. Android 路径(Path)与剪裁(Clipping)详解

    转自:http://blog.csdn.net/bigdavidwli007/article/details/8930640 在定义各种形状的view的需求驱使下 ,在网上找到这片文章,貌似看的人很少 ...

  4. ym—— Android 5.0学习之Tinting和Clipping

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 前言 Android 5.0的知识点讲完,下一篇要给大家带来一个综合例子的Demo,以 ...

  5. Android开源项目分类汇总-转载

    太长了,还是转载吧... 今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有 ...

  6. Android开源项目分类汇总[转]

    Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析 欢迎加入 QQ 交流群:383537512(入群理由需要填写 ...

  7. freeglut中提供的几种立体几何对象绘制的android移植

    在freeglut_geometry.c中定义了几种常见图形的绘制,包括立方体, 球面, 圆锥体, 圆柱体, 圆环面, 十二面体, 八面体, 四面体, 二十面体, 菱形十二面体(斜十二面体)等几种立体 ...

  8. 【Android应用开发】RecycleView API 翻译 (文档翻译)

    . RecyclerView extends ViewGroup implements ScrollingView NestedScrollingChild java.lang.Object    ↳ ...

  9. Android实现炫酷SVG动画效果

    svg是眼下十分流行的图像文件格式了,svg严格来说应该是一种开放标准的矢量图形语言,使用svg格式我们能够直接用代码来描画图像,能够用不论什么文字处理工具打开svg图像.通过改变部分代码来使图像具有 ...

最新文章

  1. 户外lisp导向牌如何安装_有了激光切割导向牌,妈妈再也不用担心我迷路啦
  2. 【整理】SAP PM工厂维护模块初识
  3. 请验证实例名称是否正确并且 sql server 已配置为允许远程连接_安装MySQL后,需要调整的10个性能配置项...
  4. SDUT 3377 数据结构实验之查找五:平方之哈希表
  5. 程序员面试金典 - 面试题 17.07. 婴儿名字(并查集)
  6. 【工具】Notepad++的一些常用配置
  7. alphazawgyiversion3 安装口令_车窗晴雨挡到底有着什么用?为什么那么多人安装?酷斯特玩车...
  8. linux 平行运行命令,Linux paste命令
  9. 19.Java 数据库编程
  10. IntelliJ IDEA 2017.2永久破解
  11. 卷积码树状图怎么画_卷积码状态图怎么画 卷积编码器状态图画法
  12. React Native导航器之react-navigation使用
  13. 技校计算机可以学平面设计吗,上技校可以学平面设计吗 去技校学平面设计还是自己在家自学好 - 兔课网...
  14. 聊聊旷厂黑科技 | 五彩斑斓的黑,旷视“算”出来了!
  15. Tslib移植与分析
  16. 《MLB棒球创造营》:走近棒球运动·圣路易斯红雀队
  17. 微信开放平台-第三方平台开发配置及常见的问题
  18. mac搜不到Android模拟器,听不到声音Android模拟器Mac
  19. UTC和本地时间互相转换
  20. 移动端点击input不触发光标(原生js)

热门文章

  1. 顺时针(逆时针)填充矩阵
  2. 关于SAP 启用新公司时 选用的会计准则
  3. SQL实现一对多、多对多建表与查询
  4. python 空间法向量可视化_利用空间法向量求二面角具体方法
  5. 小白鼠喝毒水问题(一分为二的思想)
  6. leetcode_345 Reverse Vowels of a String
  7. 阿里云服务器支持IPV6和CND的详细教程
  8. 计算机主机安全属性包括,计算机安全属性包括哪些
  9. 计算机资源管理器不显示桌面图标,Win7 64位系统启动后,如何解决桌面不显示图标和任务栏的问题...
  10. rk3288 RTC实现定时开关机