eoe·Android开发社区's Archiver

dxw_work_ing 发表于 2010-5-10 12:12

我对SurfaceView的一点看法

今天才做了一点SurfaceView的示例,例子很简单,就是画一些矩形,圆啊什么的。
这才知道,原来SurfaceView重写onDraw()方法是没有用的。SurfaceView中画图的关键对象Canvas对象必须要从一个SurfaceHolder对象获取:
Canvas canvas = holder.lockCanvas();
拿到canvas之后就可以进行绘画了。
绘画完毕之后还要做的一件事就是提交绘画
holder.unlockCanvasAndPost();
从方法的命名可以看出,这个方法将原来锁定的(lockCanvas())的画板解除锁定,然后将画板的内容Post提交出去,相比应该是提交给SurfaceView,然后显示出来。

突然又想到这两天看到的所谓“脏矩形”,局部刷新的概念。论坛牛人早已放出无数相关帖子,可惜之前一直没看懂。现在想来,局部刷新大概是这样子的:
Canvas canvas = holder.lockCanvas(rect);
同样是锁定画板,但是这里对于画板有了一个限制,那就是画板的范围仅限于参数rect这个矩形范围中,这样就相当于拿到了仅限于此rect大小的一个小画板,然后我们用canvas在这个小画板上进行绘画,最后解锁小画板,叫小画板上的绘画内容Post提交给SurfaceView。我猜测这就是所谓的局部刷新了。
以上所说是我一上午关于SurfaceView的学习总结,希望论坛大侠帮我纠正错误,感激不尽。

song314 发表于 2010-5-13 16:14

谢谢了,最近也在研究这玩意。

blv2 发表于 2010-7-6 11:11

好贴,感谢楼主分享!!!

可可麦兜 发表于 2010-7-15 14:30

楼主说的这个很重要啊

allin 发表于 2010-7-28 16:06

恩,试试看

cmoaciopm 发表于 2010-7-30 14:55

多谢楼主分享,很有帮助的帖子

bikong7 发表于 2010-8-25 12:26

恩,不错的帖子

xua131988 发表于 2010-8-25 12:57

{:4_101:}谢谢..

wqf425 发表于 2010-8-26 10:10

不错,学习了!!

yufeng007 发表于 2010-8-27 10:30

thss

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.