- 浏览: 33960 次
- 性别:
- 来自: 北京
-
最新评论
在研究 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,如果应用到程序当中还需要具体情况具体分析,呵呵~废话了这么多,希望我写的这些东西能对看到这篇文章的人有所帮助。
例子的源码在下面,需要的话,就下载吧。
- TestAndorid.zip (43.7 KB)
- 下载次数: 51
发表评论
文章已被作者锁定,不允许评论。
-
Android核心分析(21)----Android应用框架之AndroidApplication
2012-02-13 14:34 799原文地址:http://blog.csdn ... -
Android核心分析(20)----Android应用程序框架之无边界设计意图
2012-02-13 14:31 918原文地址:http://blog.csdn ... -
Android核心分析(19)----电话系统之GSMCallTacker
2012-02-13 14:25 829原文地址:http://blog.csdn ... -
Android核心分析(18)-----Android电话系统之RIL-Java
2012-02-13 14:10 1171原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(17) ------电话系统之rilD
2012-02-13 14:02 695原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(16)-----Android电话系统-概述篇
2012-01-31 14:39 918原文地址:http://blog.csdn.net/m ... -
Android核心分析(15)--------Android输入系统之输入路径详解
2012-01-31 14:22 854原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(14)------ Android GWES之输入系统
2012-01-31 10:47 968原文地址:http://blog.csdn ... -
Android 核心分析(13) -----Android GWES之Android窗口管理
2012-01-31 10:44 840原文地址:http://blog.csdn ... -
Android 核心分析(12) -----Android GEWS窗口管理之基本架构原理
2012-01-31 10:27 1057原文地址:http://blog.csdn.net/maxle ... -
Android SurfaceFlinger中的SharedClient -- 客户端(Surface)和服务端(Layer)之间的显示缓冲区管理
2012-01-11 11:00 1371原文地址:http://blog.csdn.net/Droid ... -
Android核心分析 之十一-------Android GWES之消息系统
2012-01-10 14:09 695原文地址:http://blog.csdn.net/maxle ... -
Android核心分析 之十-------Android GWES之基本原理篇
2011-12-30 15:08 746原文地址:http://blog.csdn ... -
Android核心分析 之九-------Zygote Service
2011-12-30 15:02 770原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之八------Android 启动过程详解
2011-12-30 14:56 647原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之七------Service深入分析
2011-12-30 14:48 1150原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之六 -----IPC框架分析 Binder,Service,Service manager
2011-12-30 14:41 953原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之五 -----基本空间划分
2011-12-29 11:13 670原文地址:http://blog.csdn.net/maxle ... -
Android核心分析之四 ---手机的软件形态
2011-12-29 11:09 677原文地址:http://blog.csdn.net/maxle ... -
Android是什么 之三-------手机之硬件形态
2011-12-29 11:07 654原文地址:http://blog.csdn.net/maxle ...
相关推荐
Android开发者学习笔记——View、Canvas、bitmap Android 开发者学习笔记——View、Canvas、bitmap 是 Android 开发中常用的类,本文将通过实例讲解 View、Canvas 等相关知识点。 从资源中获取位图 在 Android ...
这篇博客"2011.09.20(3)——— android canvas.clipRect"主要探讨了Canvas类中的`clipRect()`方法,这是一个非常关键的裁剪操作,用于限制后续绘图操作的区域。 `clipRect()`方法允许开发者定义一个矩形区域,...
在`android学习笔记--clip.docx`文档中,可能详细阐述了`clipRect`的使用实例、与其他方法的结合使用、注意事项等内容。通过阅读这份文档,开发者可以更深入地理解`clipRect`的原理和应用场景,从而在Android开发中...
通过这个案例,开发者不仅可以学习到如何使用Canvas绘制自定义图形,还可以深入理解Matrix和Shader在Android图形绘制中的应用,这些都是Android UI开发中的重要技能。同时,这也提供了一个实际的应用场景,帮助...
这份“安卓Android源码——(Canvas画布).rar”压缩包很可能是包含了一些关于Canvas使用的源代码示例或者解析,帮助我们深入理解Android图形绘制的底层机制。 Canvas是Android中的一个类,它允许开发者通过调用其...
在安卓Android开发中,Canvas是绘制图形的核心组件之一,它提供了在Bitmap或其他可绘表面上进行图形绘制的方法。本文将深入探讨Canvas画布及其在Android源码中的应用。 首先,Canvas可以理解为一个画板,开发者可以...
这个“html5——canvas”课程很可能是为了教授如何利用Canvas API来创建一个倒计时钟的实例。在这个教程中,我们将深入探讨HTML5 Canvas以及如何用它来实现倒计时功能。 Canvas是一个基于矢量图形的二维画布,通过...
HTML5实验室——Canvas世界(源码)easel.js jscex.jscexRequire.min.js JSLINQ.js processing.js Vector2.js Vector3.js
博客《自定义控件三部曲之绘图篇(十三)——Canvas与图层(一)》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/51317746
在这个场景中,我们将深入探讨如何使用HTML5的`canvas`来制作经典的游戏——2048。 2048是一款基于数字的益智游戏,玩家需要通过上下左右滑动屏幕,将相同的数字合并,最终达到生成2048这个数字的目标。这个游戏的...
Android—BitMap与Canvas学习笔记
《Sea Wolf-V1.1——canvas+DOM游戏详解》 在Web开发领域,HTML5的引入为游戏开发开辟了新的天地。"Sea Wolf-V1.1"是一款利用HTML5的canvas技术和DOM元素构建的在线游戏,它在原有的基础上增加了诸多新特性,极大地...
在Android开发中,Canvas是用于在屏幕上绘制图形和文本的核心组件。Paint对象则是用来设置绘制样式,如颜色、字体、线宽等。本教程将详细讲解如何利用Paint和Canvas在Android应用中实现在竖直方向上写字。 1. **...
HTML5的Canvas元素是网页开发中的一个强大工具,它允许开发者在网页上绘制图形,创建动态视觉效果。在这个实例中,我们将深入...学习和掌握这些技能对于Web开发,尤其是游戏开发和数据可视化领域,都是非常有价值的。
【ASP技术介绍】 ASP(Active Server Pages)是微软推出的一种服务器端脚本环境,用于创建动态交互式...开发者可以通过研究这个源码学习如何在ASP环境中整合canvas和Flash,同时了解网站管理系统的架构和实现方法。
Android开发者学习笔记-View、Canvas、bitmap.pdf
本文将围绕“android自定义view——波浪线”这一主题,深入探讨如何实现这样的自定义组件。 首先,我们了解自定义View的基本步骤。创建一个自定义View通常需要继承自Android的View或其子类,如ViewGroup。在这个...