求助,SurfaceView的问题Java codewhile (_isRunning()){Canvas c nulltry {c _surfaceHolder.lockCan
求助,SurfaceView的问题
Java codewhile (_isRunning()) { Canvas c = null; try { c = _surfaceHolder.lockCanvas(null); synchronized (_surfaceHolder) { myPaint(c); } } catch(Throwable e) { exceptionCaught(e,EXCEPTION_RUN); } finally { if (c != null) { _surfaceHolder.unlockCanvasAndPost(c); } }
这是一个基本的SurfaceView使用代码片段,在我的myPaint方法中,只有myPaint执行完返回后,才会将绘画的东西post到屏幕上,但如果我想在myPaint执行到一半就刷新,如何实现,例如:
Java codepublic void myPaint(Canvas c){showProcess(10);showProcess(20);}
我想要showProcess(10);执行完就刷新屏幕,而不是等showProcess(20)执行完myPaint返回后执行unlockCanvasAndPost才刷新,再问简单点就是SurfaceView有没有类似j2me的repaint的功能,可以达到马上刷新屏幕
[解决办法]SurfaceView 也是继承自 View
而View 要刷新 就可以调用 invalidate
看你的代码 你是在看 LunarLander 这个例子~~~~~~~
http://blog.csdn.net/l417584711/archive/2010/04/14/5485478.aspx
上面是我的博客 里面有一个简单的例子(本来能更简单点,但是无所谓,现在的也不难,就是有些没用的代码)
看看 能更好的理解怎么实现动画
[解决办法]建议使用runnable:
例:
private Handler mHandler = new Handler();
private Runnable testRunnable = new Runnable(){
int mInt = 10;
public void run(){
while(mInt < 21){
showProcess(mInt);
invalidate();
mHandler.postDelay(testRunnable, 100);
}
}
while (_isRunning())
{
Canvas c = null;
try {
c = _surfaceHolder.lockCanvas(null);
synchronized (_surfaceHolder) {
//myPaint(c);
mHandler.post(testRunnable);
}
} catch(Throwable e) {
exceptionCaught(e,EXCEPTION_RUN);
} finally {
if (c != null) {
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
[解决办法]刚才把Snake的例子 看了一遍 也自己做了个简单的动画的例子
发现 只用handler 就可以了
可以不用Runnable
postDelayed(runnable , delayMillis)
sendMessageDelayed(msg, delayMillis)
如果调用postDelayed 那就需要 Runnable
如果调用sendMessageDelayed 就不需要 Runnable
[解决办法]还是用Runnable 比较好
因为一旦有多个物体要运动的话 只用handler 会很卡。。。。。。。。