读书人

Android中SurfaceView的施用示例

发布时间: 2012-09-20 09:36:50 作者: rapoo

Android中SurfaceView的使用示例

SurfaceView在游戏开发中有着举足轻重的地位,它对于画面的控制有着更大的自由度(不像View要用handler来更新,关于View的),但这方面的参考资料并不是太多,能找到的例子都有点喧宾夺主的感觉,不能把使用的流程清晰展示出来,下面是个简单的示例,力求把流程清楚展示,其他的可简则简。

?

程序效果:用线程画一个蓝色的长方形。








Android surfaceview 的画图机制是这样设计的,只能画一次背景,再画你想画的才可以!<p>?</p>
<p>程序效果:用线程画一个蓝色的长方形。</p>
<pre name="code" /> 我明白了,更新画面时不用sleep,看LunarLander的例子里更新UI的线程也是一直狂跑的,占满了一个CPU 我明白了,更新画面时不用sleep,看LunarLander的例子里更新UI的线程也是一直狂跑的,占满了一个CPU

你错了,如果你不sleep而狂刷,你会发现不仅你的短信、电话等后台程序工作缓慢,而且你还能看到如下的警告信息

public void run() { while (mRun) { Canvas c = null; try { c = mSurfaceHolder.lockCanvas(null); synchronized (mSurfaceHolder) { if (mMode == STATE_RUNNING) updatePhysics(); Log.d("test", ">>>>>>>>>>>>dodraw"); doDraw(c); } } finally { // do this in a finally so that if an exception is thrown // during the above, we don't leave the Surface in an // inconsistent state if (c != null) { mSurfaceHolder.unlockCanvasAndPost(c); } } } }

而且如果我用sleep的话,物体移动会有明显卡住的感觉。不知道是怎么回事?
小弟初学,还请赐教 10 楼 jjcang 2009-10-21 这个不错,顶一个 11 楼 brumby007 2009-10-21 期待答案中……,同样顶一个 12 楼 nsm1168 2009-12-16 可以看看这里的介绍 如何在surfaceview里实现有停的性!
http://android.tgbus.com/Android/tutorial/200812/171431.shtml 13 楼 bq49 2010-06-29 raymondlueng 写道ansili 写道那如果我想在上次画的基础上接着画呢?。
也就是说我第一次在surfaceview 画了一个方块,再次接到用户的动作时在上次所画结果上接着在surfaceview 再画一个方块.此时surfaceview 上已经存在两个方块了。
surfaceview 能否胜任? 需要怎么做?
如果要保留当前的接着画,SurfaceView是无法做到的!

=============应该是可以的!SurfaceView绘制无非也就是用的Canvas,只要获得了这个Canvas就可以画了!这个效果应该就是差不多的例子吧!
http://sean.huanglijiang.com/article.asp?id=227

读书人网 >Android

热点推荐