设为首页 加入收藏

TOP

Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法(二)
2014-11-24 14:24:11 来源: 作者: 【 】 浏览:5
Tags:Android SurfaceView 绘图 覆盖 刷新 矩形 方法
形的1/4大小那么点区域,其执行效果为:


SNAGHTML342f602


可以看到,仅有那1/4区域在快速刷新,其他部分都是静止不动的了,现在的刷新帧频差不多已经能达到最大帧频了,我们的优化起作用了:)


不过别高兴的太早,实际上如果把刷新区域扩大到整个问号图形所在的矩形区域的话,你会发现优化作用变得微乎其微了,还是没法达到最大帧频的,因为更新区域增大了3倍,带来的资源消耗也就大幅增加。



这种情况下就应当考虑结合覆盖刷新方法再进一步优化了。


试想一下,我们每次刷新时最大的消耗在哪?


没错,在背景图绘制上,这个绘制区域非常大,会消耗我们很多资源,但实际上背景图在此例中是从不变化的,也就是说我们浪费了很多资源在无用的地方。


那么可不可以只绘制一次背景,以后每次都只绘制会动的问号图形呢?


完全可以,尝试修改一下代码,再前面加一个帧计数器,然后我们仅在第一帧的时候绘制背景:


Android


这样很简单,但是改后直接运行的话你会发现一个奇怪的状况:


Android


问号图案会变得有残影了。


啊哈,这正是我使用半透明图案做范例的目的,通过这个重影,我们就能看出,覆盖刷新其实就是将每次的新的图形绘制到上一帧去,所以如果图像是半透明的,就要考虑重复叠加导致的问题了,而如果是完全不透明的图形则不会有任何问题。


背景会在背景图和黑色背景之间来回闪。


这个问题其实是源于SurfaceView的双缓冲机制,我理解就是它会缓冲前两帧的图像交替传递给后面的帧用作覆盖,这样由于我们仅在第一帧绘制了背景,第二帧就是无背景状态了,且通过双缓冲机制一直保持下来,解决办法就是改为在前两帧都进行背景绘制:


Android


现在就没有问题了(如果换成个不透明的图形的话就真没问题了):


Android


现在虽然还是达不到最大帧频,但是也算不错啦,在真机上跑的会更快些,接近最大帧频了。



我这也是刚接触Android开发,分享这点心得出来,有写的不对的欢迎指点一二^^


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 一个简单手机响铃功能实现 下一篇Android知识:SurfaceView,Surfac..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: