首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

,SurfaceView的有关问题

2012-01-15 
求助,SurfaceView的问题Java codewhile (_isRunning()){Canvas c nulltry {c _surfaceHolder.lockCan

求助,SurfaceView的问题

Java code
while (_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 code
public 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 会很卡。。。。。。。。

热点排行