一起Talk Android吧(第四百零六回:管理画布canvas)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百零六回:管理画布canvas)相关的知识,希望对你有一定的参考价值。

文章目录


各位看官们,大家好,上一回中咱们说的例子是"画布的变换"的例子,这一回中咱们介绍的例子是" 管理画布"。闲话休提,言归正转,让我们一起Talk android吧!

看官们,我们在一章回中介绍了如何变换画布,如果对画布进行了多次的变换,那么需要对画布做管理,本章回中将介绍如何管理画布。

使用原因

我们使用的画布坐标默认为屏幕原点(0,0)坐标,如果对画布变换后,新画布的坐标就不再是默认的坐标,以后在画布上的任何控件,都会把新画布的坐标当作原点坐标。

举个简单的例子,我们把画布沿x轴方向平移100dp,然后在新画布上画一条沿x轴方向(start x=0,end x =100,start y = end y = 10)的直线,此时的屏幕效果为:在屏幕坐标(100,10)处有一条沿x轴方向的直线,大家可以看到,直线虽然是从坐标点(0,10)开始画的,但是它显示的效果却是从坐标点(100,10)开始的,其原因主是直线所有画布进行了平移,进而导致画布上其它绘制操作的坐标发生了变化。

如果大家不理解的话,可以自己动手去实践下。这个是专业的例子,我们再举一个生活中的例子:你坐着车向前走,自己虽然没有走路,但是车会带着你走路,你相对地面来说仍然是向前走的,例子里的车类似我们画图时的画布,即使画布上的控件不变,但是画布的更换会带着画布上的控件发生变换。

管理方法

我们对画布的管理方法是使用缓冲,具体操作为:变换画布前把画布状态保存到缓冲区中,画布变换操作完成后再从缓冲区中恢复画布原来的状态。系统为我们提供了相关的方法来保存和恢复画布状态,示例代码如下:

//保存画布
canvas.save();
//变换画布
canvas.XXX
//恢复画布
canvas.restore();

原理分析

系统对画布的保存和恢复通过栈实现,因此管理画布背后的原理为:先进后出

保存画布操作相当于入栈操作,恢复画布操作相当于出栈操作。所有画布都使用先进后出的方法进行管理。

此外,在个别情况下,需要特殊处理时可以把某个画布单独拿出来使用,此时可以使用canvas.restoreToCount()方法,该方法的参数就是第n个画布,也可以理解为栈中的某个画布。

看官们,关于Android中"管理画布"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第四百零六回:管理画布canvas)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第五百零六回:如何调整组件在约束布局中的角度)

一起Talk Android吧(第四百零七回:绘制几何图形)

一起Talk Android吧(第四百八十六回:值动画:ValueAnimator)

一起Talk Android吧(第四百四十六回:UI控件之DatePickerDialog)

一起Talk Android吧(第四百一十六回:绘制正弦波总结)

一起Talk Android吧(第四百七十六回:缩放类视图动画)