`

Android学习笔记——Canvas & clipRect

阅读更多

在研究 Android 中幻灯片的效果的过程中,接触到了 Canvas 以及它的的 clip 方法,以下是自己研究之后,对网上的一些资料进行整合修改之后的结果,以防止自己以后忘记,如果内容当中存在一些错误,还请不吝赐教:

 

初次接触到 android clip 有以下两点疑问:

1.       Clip (剪切)的时机

2.       Clip 中的 Op 的参数的意思

 

首先也需要明确几点:

1.       Clip 是对 canvas 起作用,而非画在 canvas 上面的图片。

2.       进一步的讲, Clip 是对 clip 之后的画在 canvas 上的图像具有影响,而对 clip 之前的图像没有任何影响,当然,这是指你在 clip 之后没有在 canvas 上画任何东西

 

Op 参数的释义:

1.       DIFFERENCE 之前剪切过除去当前要剪切的区域

2.       INTERSECT 当前要剪切的区域在之前剪切过内部的部分

3.       UNION  当前要剪切的区域加上之前剪切过内部的部分

4.       XOR 异或,当前要剪切的区域与之前剪切过的进行异或

5.       REVERSE_DIFFERENCE DIFFERENCE 相反,以当前要剪切的区域为参照物,当前要剪切的区域除去之前剪切过的区域

6.       REPLACE 用当前要剪切的区域代替之前剪切过的区域

7.       如果 Op 参数为空,与 INTERSECT 的效果一样,两个区域的交集

 

 

接下来,通过我自己编写的一个测试的例子以及截图进行说明:

 

例子:

1. 在canvas上剪切从(40,40)到(,)的方块,在下面图中为绿色区域。

2. 在canvas上剪切从(,)到(,)的方块,在下图中为蓝色半透明区域。

3. 在canvas上剪切从(40,40)到(,)的方块。

 

这是我自己重写的onDraw方法:

 

    @Override
    protected void onDraw(Canvas canvas)
    {
        canvas.drawColor(Color.GRAY);
        
        canvas.clipRect(rectBlue, mOp);
        canvas.clipRect(rectGreen, mOp);
        canvas.clipRect(rectX, mOp);
        
        canvas.drawRect(rectGreen, mPaint1);
        canvas.drawRect(rectBlue, mPaint2);
        
        // 重置背景色
        canvas.drawColor(Color.CYAN);
    }

  在onDraw()执行的最后一步,我又重置了一次背景色,在下面的图示中,默认为左侧未重置背景色,右侧重置背景色。

 

Op参数为DIFFERENCE

  画布仅保留了所有剪切区域并集之后的补集

 

Op参数为INTERSECT

  画布仅保留了所有剪切区域的交集


Op参数为REPLACE

  画布仅保留了三个剪切区域的并集

 

Op参数为REVERSE_DIFFERENCE

  画布仅保留了第一个剪切区域在第三个剪切区域中的补集 


Op参数为UNION

  画布保留了全集 

 

Op参数为XOR

  画布仅保留了。。。。。。 

 

 

最后一个参数的效果,如果用补集、交集之类的概念解释起来真是太麻烦了,其实,到这里,已经很明白了,在计算剪切区域的时候,应用了逻辑运算,可惜本人大脑在逻辑运算方面实在是转得很慢,只能以后补课了。

 

这个例子只是简单的DEMO,如果应用到程序当中还需要具体情况具体分析,呵呵~废话了这么多,希望我写的这些东西能对看到这篇文章的人有所帮助。

 

例子的源码在下面,需要的话,就下载吧。

 

 

 

 

 

 

 

  • 大小: 5.9 KB
  • 大小: 6 KB
  • 大小: 5.9 KB
  • 大小: 6 KB
  • 大小: 5.7 KB
  • 大小: 5.7 KB
  • 大小: 6 KB
  • 大小: 6 KB
  • 大小: 5.8 KB
  • 大小: 5.9 KB
  • 大小: 5.9 KB
  • 大小: 5.7 KB
1
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android开发者学习笔记——View、Canvas、bitmap

    Android开发者学习笔记——View、Canvas、bitmap Android 开发者学习笔记——View、Canvas、bitmap 是 Android 开发中常用的类,本文将通过实例讲解 View、Canvas 等相关知识点。 从资源中获取位图 在 Android ...

    2011.09.20(3)——— android canvas.clipRect

    这篇博客"2011.09.20(3)——— android canvas.clipRect"主要探讨了Canvas类中的`clipRect()`方法,这是一个非常关键的裁剪操作,用于限制后续绘图操作的区域。 `clipRect()`方法允许开发者定义一个矩形区域,...

    canvas的clipRect理解

    在`android学习笔记--clip.docx`文档中,可能详细阐述了`clipRect`的使用实例、与其他方法的结合使用、注意事项等内容。通过阅读这份文档,开发者可以更深入地理解`clipRect`的原理和应用场景,从而在Android开发中...

    Android——Canvas切割出扇形表盘式进度

    通过这个案例,开发者不仅可以学习到如何使用Canvas绘制自定义图形,还可以深入理解Matrix和Shader在Android图形绘制中的应用,这些都是Android UI开发中的重要技能。同时,这也提供了一个实际的应用场景,帮助...

    安卓Android源码——(Canvas画布).rar

    这份“安卓Android源码——(Canvas画布).rar”压缩包很可能是包含了一些关于Canvas使用的源代码示例或者解析,帮助我们深入理解Android图形绘制的底层机制。 Canvas是Android中的一个类,它允许开发者通过调用其...

    安卓Android源码——(Canvas画布).zip

    在安卓Android开发中,Canvas是绘制图形的核心组件之一,它提供了在Bitmap或其他可绘表面上进行图形绘制的方法。本文将深入探讨Canvas画布及其在Android源码中的应用。 首先,Canvas可以理解为一个画板,开发者可以...

    html5——canvas

    这个“html5——canvas”课程很可能是为了教授如何利用Canvas API来创建一个倒计时钟的实例。在这个教程中,我们将深入探讨HTML5 Canvas以及如何用它来实现倒计时功能。 Canvas是一个基于矢量图形的二维画布,通过...

    HTML5实验室——Canvas世界(源码)

    HTML5实验室——Canvas世界(源码)easel.js jscex.jscexRequire.min.js JSLINQ.js processing.js Vector2.js Vector3.js

    博客《自定义控件三部曲之绘图篇(十三)——Canvas与图层(一)》对应源码

    博客《自定义控件三部曲之绘图篇(十三)——Canvas与图层(一)》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/51317746

    HTML5——canvas制作游戏2048

    在这个场景中,我们将深入探讨如何使用HTML5的`canvas`来制作经典的游戏——2048。 2048是一款基于数字的益智游戏,玩家需要通过上下左右滑动屏幕,将相同的数字合并,最终达到生成2048这个数字的目标。这个游戏的...

    Android—BitMap与Canvas学习笔记

    Android—BitMap与Canvas学习笔记

    Sea Wolf-V1.1 —— canvas+dom游戏

    《Sea Wolf-V1.1——canvas+DOM游戏详解》 在Web开发领域,HTML5的引入为游戏开发开辟了新的天地。"Sea Wolf-V1.1"是一款利用HTML5的canvas技术和DOM元素构建的在线游戏,它在原有的基础上增加了诸多新特性,极大地...

    android利用Paint在Canvas上实现竖排写字

    在Android开发中,Canvas是用于在屏幕上绘制图形和文本的核心组件。Paint对象则是用来设置绘制样式,如颜色、字体、线宽等。本教程将详细讲解如何利用Paint和Canvas在Android应用中实现在竖直方向上写字。 1. **...

    Html5——Canvas实例(制作太阳地球月球三球联动动画)

    HTML5的Canvas元素是网页开发中的一个强大工具,它允许开发者在网页上绘制图形,创建动态视觉效果。在这个实例中,我们将深入...学习和掌握这些技能对于Web开发,尤其是游戏开发和数据可视化领域,都是非常有价值的。

    ASP实例开发源码——canvas-Flash网站管理系统 v1.0.zip

    【ASP技术介绍】 ASP(Active Server Pages)是微软推出的一种服务器端脚本环境,用于创建动态交互式...开发者可以通过研究这个源码学习如何在ASP环境中整合canvas和Flash,同时了解网站管理系统的架构和实现方法。

    Android开发者学习笔记-View、Canvas、bitmap.pdf

    Android开发者学习笔记-View、Canvas、bitmap.pdf

    android自定义veiw——波浪线

    本文将围绕“android自定义view——波浪线”这一主题,深入探讨如何实现这样的自定义组件。 首先,我们了解自定义View的基本步骤。创建一个自定义View通常需要继承自Android的View或其子类,如ViewGroup。在这个...

Global site tag (gtag.js) - Google Analytics