2013-10-08 47 views
0

設置:的Android postinvalidate不調用的onDraw()

Activity的佈局具有SurfaceView對象(obj)與定義的SurfacHolder回調。 OBJ定義了以下螺紋(這是通過Xamarin寫在C#):

void DrawThread() { 
     Canvas c; 
     while (drawingThreadActive) { 
      c=null; 
      try { 
       c = this.Holder.LockCanvas(null); 
       lock(Holder) { 
        //force redraw 
        PostInvalidate(); 
       } 
      } finally { 
       if (c!=null) { 
        this.Holder.UnlockCanvasAndPost(c); 
       } 
      } 
      //sleep for 50 ms or so (20Hz refresh) 
     } 
    } 

SurfaceCreated()回調被調用就好了,啓動這個線程。但是,調用PostInvalidate()永遠不會導致調用onDraw()函數。

我很確定一切都設置正確 - 任何想法我失蹤?

鑑於SurfaceCreated()方法被調用,我假設它是

任何想法,我缺少的是什麼「在UI中可見」?

+0

我猜'DrawThread'沒有在主線程上運行,是這樣嗎? – ssantos

+0

如何確定主線程在哪裏/哪裏?我試圖讓DrawThread()調用Invoke,但是失敗了,所以它不在主線程中。鑑於它是它自己的線程,是不是意味着它不能在主線程上? – reza

+0

請將相關代碼發佈到您要調用DrawThread的地方 – ssantos

回答