Android SurfaceView双缓存

SurfaceView实现了2个缓存,绘图的时候会先绘制到一个缓存,绘制下一张图的时候,则绘制到另一缓存,这样轮流切换。

缓存绘制完了就拿去显示,缓存中得图不会擦出。

这样会导致一个问题:

假设2个缓存分别叫A、B,有2副3X3的图像,内容分别是1和2;

首先我们做第一幅图向右移动,没有内容用0表示:

 1  0  0                 1   1   0               1   1   1           

 1  0  0                 1   1   0               1   1   1

 1  0  0                 1   1    0              1   1   1

A                        B                          A

上面是向右移动完成,缓存中得图像,接着我们用第二幅图做向下移动,此时的缓存轮到了B:

 2    2     2

 1    1     0

 1    1     0

B

这样问题就来了,向下 我们应该是没有1的。应该是:

 2    2   2

 0    0   0

 0    0   0

B


解决问题的方法:建一个3X3,也就是跟图像一样大得Canvas,在上面先画好,再draw到SurfaceView。

按上面方法,先向右,假设Canvas叫C,则:

 1    0   0               1    1     0             1    1    1              

 1    0   0               1    1     0             1    1    1

 1    0   0               1    1     0             1    1    1

C                        C                         C


 1    0   0            1   1    0            1   1   1           

 1    0   0            1   1    0            1   1   1

 1    0   0            1   1    0            1   1   1

A                         B                       A


再向下:

 2  2  2     2  2  2      2  2  2

 0  0  0     2  2  2      2  2  2

 0  0  0     0  0  0      2  2  2

C            C              C

 2  2  2     2  2  2      2  2  2

 0  0  0     2  2  2      2  2  2

 0  0  0     0  0  0      2  2  2

B            A              B



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值