SurfaceView  也是继承自 View
而View 要刷新 就可以调用 invalidate
看你的代码   你是在看 LunarLander 这个例子~~~~~~~http://blog.csdn.net/l417584711/archive/2010/04/14/5485478.aspx
上面是我的博客 里面有一个简单的例子(本来能更简单点,但是无所谓,现在的也不难,就是有些没用的代码)
看看 能更好的理解怎么实现动画

解决方案 »

  1.   

    建议使用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);
                        
                    }
                                }
         }}
      

  2.   


    写错了有个地方, private Runnable testRunnable = new Runnable(){  int mInt = 10;
      public void run(){
      if(mInt < 21){
      showProcess(mInt);
      invalidate();
      mInt += 10;
      mHandler.postDelay(testRunnable, 100);
      }
    }
      

  3.   

    Snake那个例子 好像有用到Handler 但是没看到他用Runnable
    有空再去看看那个例子~~~~
      

  4.   

    楼上两位大哥,我也考虑到过invalidate方法,但是这个方法和postInvalidate是去调用onDraw方法,关键是现在我根本就没有实现onDraw方法,我是在一个线程里不断在Canvas上绘图,然后不断的post到屏幕上
      

  5.   

    而且用如果是surfaceView使用invalidate调用onDraw也只是在缓冲canvas上进行绘图,貌似是不会帮你post到屏幕的吧
      

  6.   

    刚才把Snake的例子 看了一遍 也自己做了个简单的动画的例子
    发现 只用handler 就可以了 
    可以不用Runnable 
    postDelayed(runnable , delayMillis)
    sendMessageDelayed(msg, delayMillis)如果调用postDelayed  那就需要 Runnable 
    如果调用sendMessageDelayed  就不需要 Runnable 
      

  7.   

    还是用Runnable   比较好 
    因为一旦有多个物体要运动的话 只用handler 会很卡。。