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

简介:

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

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

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);
            }
        }
    }
复制代码

 






本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/p/4164979.html,如需转载请自行联系原作者
目录
相关文章
|
搜索推荐 Java Linux
Android基础入门教程
Android是一种基于Linux的自由及开放源代码的操作系统,Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
251 0
|
XML 存储 安全
Android四大组件全面解析,夯实基础。(下)
Android四大组件 lay a solid foundation 夯实基础
203 0
|
Java Android开发
移动应用程序设计基础——Android环境构建与Activity生命周期
安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。 5、 完成智能手机开发平台安装、以及相关配置; 6、 并实现Hello World; 7、 添加Log日志,通过Log日志验证Ac 1、 安装JAVA JDK 2、 安装Android Studio,熟悉AS的基本操作,改变AS的字体,显示方式;截图和文字说明。 3、 建立新项目,实现Hello World。说明各个文件的作用,以及各个关键语句的作用或含义,给出程序的运行结果。 4、 设置生命周期的Log日志,分别执行相关操作
310 0
移动应用程序设计基础——Android环境构建与Activity生命周期
|
XML 存储 移动开发
Android基础 | 关于Activity你应该明白的一切
Activity 作为一个老生常谈的话题,它是我们刚接触Android开发就遇到,虽然已有一段时间开发经验,但谈起完全搞懂Activity相关,不敢妄言,故结合个人理解及书籍参考,简单总结一下 Activity基础相关知识,其中也留出了一些有意思的问题。
237 0
|
Android开发
Android四大组件全面解析,夯实基础。(中)
Android四大组件 lay a solid foundation 夯实基础
226 0
Android四大组件全面解析,夯实基础。(中)
|
存储 设计模式 前端开发
Android四大组件全面解析,夯实基础。(上)
Android四大组件 lay a solid foundation 夯实基础
144 0
|
安全 Java 调度
Android多线程编程——线程基础
Android沿用了Java的线程模型,一个Android应用在创建的时候会开启一个线程,我们叫它主线程或者UI线程。
248 0
Android多线程编程——线程基础
|
算法 Java Android开发
Android开发:使用Java对手机截图图片进行任意区域的颜色对比度处理操作
开发项目过程中,对于手机屏幕截图,需要对获取到的截图的任意部分进行区域颜色对比度的识别操作,由此判定任意指定区域是否满足某对比度基本标准,但是该功能在网上任何地方都没有找到过Java方面的代码,于是根据RGB转换测试的原理:即获取每个像素点的RGB,通过RGB对比度定义公式进行像素点的集合换取。
|
Android开发
Android点击空白区域,隐藏输入法软键盘
Android点击空白区域,隐藏输入法软键盘
668 0
|
XML 存储 Java
Android动画基础详析 | 概述、逐帧动画、视图动画(附诸多实际运行效果动图)
Android动画基础详析 | 概述、逐帧动画、视图动画(附诸多实际运行效果动图)