当前位置: 代码迷 >> Android >> Android学习札记——Canvas & clipRect
  详细解决方案

Android学习札记——Canvas & clipRect

热度:94   发布时间:2016-05-01 12:30:00.0
Android学习笔记——Canvas & clipRect

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

?

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

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,如果应用到程序当中还需要具体情况具体分析,呵呵~废话了这么多,希望我写的这些东西能对看到这篇文章的人有所帮助。

?

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

?

?

?

?

?

?

?

  相关解决方案