Android SurfaceView的总结与理解

(1) 很多人对SurfaceView的双缓冲理解并不对。
一般游戏里说的双缓冲防止画面闪烁,只是每一帧先绘制到bitmap再绘制到SurfaceView的canvas。
而框架中的Surface的双缓冲是另一个概念。 事实上不管是View还是SurfaceView都会使用到Surface双缓冲技术,在4.1以后更是引入了三缓冲。

楼主看到的画面实际上就是Surface的三缓冲造成的。使用SurfaceView每次lockCanvas获取到的画布都是1,2,3个画布轮流切换。

Surface的多缓冲是系统可以指定的, 4.1以前默认是2个,4.2以后默认是3个,厂商可以修改,最多可以使用32个缓冲区。

(2)下次LockCanvas绘制的东西能覆盖上次LockCanvas绘制的东西,当然这里的覆盖我理解的是从LockCanvas取出来的Canvas区域中的非图像区域(指的没有绘制任何图形或者图像的区域)。举例来说,假如你从lockCanvas取出来一个50*50的canvas,但是你在该canvas左下角绘制30*50的矩形,剩余的20*50则为非图像区。但是,当前从LocakCanvas取来的canvas非图形图像是不能覆盖上上次从LockCanvas中取出来的Canvas所绘制的图像。但是对于当前从LockCanvas取出来的Canvas图形图像区域则没有这个问题,可以覆盖任何之前从LockCanvas中取出来的canvas绘制的图像。

(3)Crazy android书中关于SurfaceView描述不是很清楚,其中第一个例子关于在背景图上画图形的例子中只有在真机上能够成功运行。在虚拟机上,开始绘制图形时,背景图像就会丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值