2013-10-08 1 views
0

설정 :안드로이드 postinvalidate가 된 onDraw를 호출하지 않습니다()

활동의 레이아웃이 정의 된 SurfacHolder 콜백와 서피스 뷰 SurfaceView 객체 (obj) 등이있다. OBJ (이 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

답변

1

답변을 찾았습니다.이 게시물은 중복으로 표시 될 수 있습니다. : Android: SurfaceView ignoring postInvalidate()?

어떤 이유로 든 SurfaceView는 기본적으로 '그릴 수 없습니다'. SurfaceCreated()SetWillNotDraw(false)을 호출합니다.

관련 문제