一起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中"管理画布"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值