专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Android

,SurfaceView的有关问题

发布时间:2010-05-30 10:52:42 文章来源:www.iduyao.cn 采编人员:星星草
求助,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 会很卡。。。。。。。。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: