我对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的学习总结,希望论坛大侠帮我纠正错误,感激不尽。 谢谢了,最近也在研究这玩意。 好贴,感谢楼主分享!!! 楼主说的这个很重要啊 恩,试试看 多谢楼主分享,很有帮助的帖子 恩,不错的帖子 {:4_101:}谢谢.. 不错,学习了!! thss
页:
[1]
