Canvas和其绘制目标小结

       Canvas是一个绘制的工具,分为硬件Canvas和软件Canvas,通过使用Canvas的方法可以将点(图形)绘制到指定目标中(即通常所说的画布,canvas中持有画布的引用),绘制目标有几种,待会介绍。

       Canvas的绘制指令:这些最常用的指令由一系列名为drawXXX()的方法提供。它们用来实现实际的绘制行为,例如绘制点、线、面,文字。

       Canvas的辅助指令:与绘制指令的区别是,执行辅助指令后产生的变化会对绘制产生持续的影响,直到使用canvas.restore()或canvas.restoreToCount()恢复到执行该辅助指令前的状态(所以若在之后需要恢复到当前节点,需要使用int count = canvas.save())。如坐标变换,裁剪区域。而变换是基于原来的变换基础上变换的,所以变换效果是叠加的,如果一直没有restore的话。

       绘制目标:就是要绘制的数据保存的地方。对软件Canvas来说,其绘制目标是建立在Surface之上的bitmap(即在Surface的内存中创建一个bitmap)。对于硬件Canvas来说,绘制目标有两种,一种是HardwareLayer,另一种是DisplayList。Hardwarelayer是一个硬件加速下的Bitmap。而DisplayList,与Bitmap和HardwareLayer不同,它不是一块Buffer,而是指令序列,大概就是根据Canvas的各种辅助指令和绘制指令序列通过某个过程优化保存到DisplayList中(就是需要把软件绘制指令转变成硬件绘制指令),而不是在调用Canvas的绘制指令就绘制到内存中直接作为图片数据,这就是硬件Canvas和软件Canvas最大的区别,还有一个区别就是每个子控件都有一个DisplayList,每个ViewGroup也有一个DisplayList,ViewGroup的所有子控件的DisplayList会绘制到其父控件的DisplayList上。所以对于DisplayList来说,它的最大优势在要复制或者增加重复利用率的时候,不重复利用的这个DisplayList的话其实过程比软件绘图更复杂,也更耗资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值