你应该通过一个SurfaceHolder来操作你的表面对象而不是直接操作它.所以,当你的SurfaceView初始化后,通过调用getHolder()获取SurfaceHolder.你然后还应该调用addCallback()(把this传给它)来通知SurfaceHolder你想接收SurfaceHolder回调(从SurfaceHolder.Callback).最后在你的SurfaceView类中重写SurfaceHolder.Callback的每一个方法.
为了在你的第二个线程中画到表面的Canvas上,你必须把你的SurfaceHandler传给第二线程并且用lockCanvas()获取Canvas.你现在可以用Canvas做画了.一旦你完成了绘画,调用unlockCanvasAndPost(),把你的Canvas对象传给它,现在,表面将按你给它的来绘制Canvas.每次你想作画,就执行这个canvas加锁和解锁的步骤.
注:每次你从SurfaceHolder取得Canvas,Canvas的上一次的状态将保留.你必须每次都完全重画你的表面.例如,你可以通过drawColor()填充颜色或通过drawBitmap()设置一个背景图像来清空Canvas的上一次状态.否则,你将会看到你上次作画的痕迹.
我看例子,可以去看LunarLander游戏,在SDKsamples 文件夹下:<your-sdk-directory>/samples/LunarLander/.或者,浏览在SampleCode一文只浏览源码(尚未出此章,敬请期待).
摘自 nkmnkm的专栏 上一篇:android获得手机的长和宽 下一篇:android图形系统详解二:Drawables 相关文章
android C编程技巧 及 C/C++开发测试
Java程序移植到android上问题解决小结
Android入门第一篇
Android入门第二篇之LinearLayout、Ab
Android入门第三篇之RelativeLayout、
Android入门第四篇之TableLayout (一)
Android入门第五篇之TableLayout (二)
Android入门第六篇之ListView (一)
Android入门第七篇之ListView (二)
Android入门第八篇之GridView(九宫图)
图文推荐