剪切区域也称为可视区域,是由画布进行设置的;它指的是在画布上设置一块区域,当画布一旦设置了可视区域,那么除此区域外,绘制的任何内容都将看不到;可视区域可以是圆形、矩形等等。

画布提供了三种设置可视区域的方法。

1.通过坐标,设置矩形可视区域
clipRect(int left,int top,int right,int bottom)
作用:为画布设置矩形可视区域
第一、二个参数:为可视区域的左上角
第三、四个参数:为可视区域的右下角

2.利用 Path 来设置可视区域的形状
clipPath(Path path)
作用:为画布设置可视区域
参数:Path实例

3.利用 Region 来对画布设置可视区域
clipRegion(Region region)
作用:为画布设置可视区域
参数:Region 实例

Region 表示区域的集合,所以它可以设置多个区域块,而且可以通过这些区域块之间的关系来处理一些问题;比如 Region 设置它所有区域块相交的区域是否可见、设置相交区域只让交集显示等等。

Region 常用函数:
op(Rect rect,Op op)
作用:设置区域块
第一个参数:Rect 实例
第二个参数:Region.Op 静态值,表示区域块的显示方式。其中区域块的显示方式如下:
Region.Op.UNION: 区域全部显示
Region.Op.INTERSECT:区域的交集显示
Region.Op.XOR:不显示交集区域

下面是实例演示,效果图如下:

创建新项目,游戏框架为 SurfaceView 游戏框架。具体步骤参照“11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)”。

修改 MySurfaceView 类中的绘图函数如下:

    private void myDraw() {try {canvas = sfh.lockCanvas();if (canvas != null) {    //通过图片资源生成一张Bitmap 位图Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.pic01);canvas.save();canvas.drawText("原图:", 20, 20, paint);canvas.drawBitmap(bmp, 20, 30,paint);canvas.restore();canvas.save();canvas.drawText("通过坐标,设置矩形可视区域:", 20, 320, paint);/*** 为画布设置矩形可视区域* 第一、二个参数为可视区域的左上角* 第三、四个参数为可视区域的右下角*/canvas.clipRect(20,330,bmp.getWidth()+20,bmp.getHeight()/2+330);canvas.drawBitmap(bmp, 20, 330,paint);canvas.restore();canvas.save();canvas.drawText("利用 Path 来设置可视区域的形状,这里为圆形可视区域:", 20, 620, paint);Path path = new Path();path.addCircle(20+bmp.getWidth()/2, 630+bmp.getHeight()/2, bmp.getWidth()/2, Direction.CCW);/*** 为画布设置可视区域* 参数:Path实例* 利用Paht 可以为位图设置任何需要的可视区域,这里是设置一个圆形可视区域。*/canvas.clipPath(path);canvas.drawBitmap(bmp, 20, 630, paint);canvas.restore();canvas.save();canvas.drawText("利用 Region 来对画布设置可视区域:", 20, 920, paint);Region region = new Region();//区域块全部显示region.op(new Rect(20,930,120,1030), Region.Op.UNION);//不显示交集区域region.op(new Rect(50,930,100,1080), Region.Op.XOR);canvas.clipRegion(region);canvas.drawBitmap(bmp, 20, 930, paint);canvas.restore();}} catch (Exception e) {} finally {if (canvas != null) {sfh.unlockCanvasAndPost(canvas);}}}

转载于:https://www.cnblogs.com/yc-755909659/p/4164979.html

【读书笔记《Android游戏编程之从零开始》】15.游戏开发基础(剪切区域)相关推荐

  1. 《Android游戏编程之从零开始》书评之基础的魅力

    拜读完<Android游戏编程之从零开始>的试读章节之后,感受颇深,对于游戏开发过程中用到的知识,有了初步的了解,此书就一些基本图形为例,展开对游戏开发的基本原理的阐述.本人感觉,介绍一种 ...

  2. 【通知】▁▂▃ Himi 著作《Android游戏编程之从零开始》★书籍源码+第4/6/7样章★博客系列源码整理打包-免费下载★ ▃▂▁

    2011年9月22日(Himi的22岁生日当天),Himi的著作:<Android游戏编程之从零开始>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买): 感谢一直 ...

  3. [转] Himi 著作《Android游戏编程之从零开始》★书籍源码+第4/6/7样章—免费下载★...

    本文转自:http://blog.csdn.net/xiaominghimi/article/details/6802444 Himi 原创, 转载请注明出处,谢谢! 原文地址:http://blog ...

  4. [置顶]▁▂▃ Himi 著作《Android游戏编程之从零开始》★书籍源码免费下载★ ▃▂▁...

    Himi 原创, 转载请注明出处,谢谢! 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6802444 2011年9月22日(Himi的 ...

  5. ★书籍源码免费下载★Himi 著作《Android游戏编程之从零开始》

    2011年9月22日(Himi的22岁生日当天),Himi的著作:<Android游戏编程之从零开始>一书正式发售:(请到书店.淘宝.当当网等进行购买) 感谢一直以来关注Himi的童鞋们. ...

  6. 【Android】Android游戏编程之从零开始

    <Android游戏编程之从零开始>主要系统地讲解了Android游戏开发,从最基础部分开始,让零基础的Android初学者也能快速学习和掌握Android游戏开发.<Android ...

  7. Windows游戏编程之从零开始d

    Windows游戏编程之从零开始d I'm back~~恩,几个月不见,大家还好吗? 这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来 ...

  8. 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁

    2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...

  9. 【浅墨著作】 逐梦旅程 Windows游戏编程之从零开始 勘误 配套源代码下载

    这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来浅墨的博客逛一下看有没有更新,"每天都来就像看女神那般不依不舍", ...

  10. 读书笔记——《Python编程从入门到实践》第二章

    读书笔记--<Python编程从入门到实践>第二章 读书笔记--<Python编程从入门到实践>第二章 变量 如何使用变量 如何规范变量命名 字符串 字符串是什么 如何修改字符 ...

最新文章

  1. Numpy数组常用函数汇总(数学运算、三角函数、位运算、比较运算及其它)
  2. Docker,Docker-Compose,Docker Swarm,Kubernetes之间的区别
  3. Codevs 2296 仪仗队 2008年省队选拔赛山东
  4. linux 系统显示很大,在Linux中可视化显示内存占用情况的方法
  5. python发红包实现
  6. 罗永浩从交个朋友拿走“天价”分手费?将进军AR行业:创业三部曲之三即将开拍...
  7. 读《scikiit-learn机器学习》黄永昌第三章
  8. C语言 复制字符串 malloc
  9. 卑微的我,喜欢遥远的你
  10. 2022电工(初级)操作证考试题及模拟考试
  11. java小游戏超级玛丽:07.第三关的设计
  12. TestBird成为全球最大手游测试平台
  13. SPA 中前端路由基本原理与实现方式
  14. 推荐一个免费下matlab代码的网站
  15. 一个很棒的字帖生成器
  16. Windows 搜索
  17. python实现动态壁纸_流弊了!竟然用Python做一个炫酷的小姐姐动态壁纸
  18. 探秘Sophos反病毒实验室监测主流病毒全过程
  19. python中的str
  20. 那么多人用破解版AD,Altium公司怎么赚钱

热门文章

  1. 如何删除U盘中的System Volume Information文件夹?
  2. C Programming Style 总结
  3. Mybatis系列(四)注解
  4. Python中re.findall的贪心和非贪心算法
  5. 关于websocket长链接的使用
  6. 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
  7. 化解字符串不能超过8000的方法及交叉表的处理
  8. Java方法重载解析
  9. 华中师范大学计算机学院在哪个校区,关于《计科,你的力量在哪里?》★华师计算机科学系★研究生情况~~过来人指点下...
  10. java 典型程序,13道Java典型的Java小程序