canvas教程

[技术讨论帖] surface view Canvas 与 dirty Rect

字号+ 作者:H5之家 来源:H5之家 2016-01-15 13:26 我要评论( )

本版等级: 本版专家分:301 结帖率:94.12% 楼主 发表于:2013-01-28 10:01:54 各位技术达人,最近在研究图形图像渲染和动画的东东。遇到了一个问题,就是surfaceview的双缓冲和全屏重绘的问题。 具体描述一下: surfaceview实现动画时,需要holder.lockCan

本版等级:

本版专家分:301

结帖率:94.12%

楼主 发表于: 2013-01-28 10:01:54


各位技术达人, 最近在研究图形图像 渲染和动画的东东。 遇到了一个问题,就是surface view的双缓冲和全屏重绘的问题。 

具体描述一下:

surface view 实现动画时,需要holder.lockCanvas 锁住“操作”Canvas ,在这个Canvas上绘制你的帧图,解锁后,底层会做一个swap操作,“显示”Canvas 与“操作”Canvas交换,实现双缓冲,避免闪屏。

那么这里有一个效率和内存的矛盾问题:就是每帧都要全屏重绘。
假如我的每一帧都会有很多的“图元素”,每一次动画的,只有其中以少部分。也就是“更新”区域是屏幕中的一小部分。每次都需要全屏重绘的话,会降低帧频,达不到平滑动画的效果。

上面的解决办法就是用一个Bitmap 作为中间层,new Canvas(Bitmap) ,将需要更新的内容绘制到这个bitmap 上,再将bitmap 绘制到实际的canvas上(lock的那个canvas)。 但是这样就会呆了额外内存的消耗,(现在android都是大屏,高分辨率的,这个内存还是很可观的。1280*720 约4M左右)。

感觉一定有一个好的方法来解决。看到holder.lockCanvas(Rect dirty) 这个方法,但实在不理解他如何使用。上我上面的需求,可能会有一个离散的dirtyRect list。如何调用这个方法呢。
而且我实际操作了一下,还是会出现闪屏的情况。

不知道哪位仁兄遇到过这样的问题,望不吝赐教啊。呵呵。

也希望大家一起讨论一下,交流交流。

分享到:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 21天学习android开发教程之SurfaceView与多线程的混搭

    21天学习android开发教程之SurfaceView与多线程的混搭

    2017-04-27 12:00

  • 宣战Surface Studio:戴尔推Canvas 售价1799美元

    宣战Surface Studio:戴尔推Canvas 售价1799美元

    2017-04-24 15:00

  • 自定义view之view显示流程

    自定义view之view显示流程

    2017-04-18 17:04

  • 宣战Surface Studio:戴尔推Canvas售价1799美元

    宣战Surface Studio:戴尔推Canvas售价1799美元

    2017-04-10 08:01

网友点评
0