2013-10-08 1 views
0

Configuration:Android postinvalidate n'invoque pas onDraw()

mise en page de l'activité a un objet SurfaceView (obj) avec les callbacks SurfacHolder définies. obj a le fil suivant défini (ce qui est écrit en C# via Xamarin):

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) 
     } 
    } 

Le rappel SurfaceCreated() est appelé très bien, qui commence ce fil. Toutefois, l'appel à PostInvalidate() n'aboutit jamais à la fonction onDraw() appelée. Je suis sûr que tout est configuré correctement - une idée de ce qui me manque?

Étant donné que la méthode SurfaceCreated() est appelée, je suppose qu'il est « visible dans l'interface utilisateur »

Toute idée de ce que je suis absent?

+0

Je suppose que 'DrawThread' ne fonctionne pas sur le thread principal, n'est-ce pas? – ssantos

+0

Comment déterminer où/où se trouve le thread principal? J'ai essayé de faire appel à DrawThread() Invoke mais cela a échoué, donc ce n'est pas sur le thread principal. Étant donné que c'est son propre thread, cela ne veut-il pas dire qu'il ne peut pas être sur le thread principal? – reza

+0

Veuillez indiquer le code pertinent où vous appelez 'DrawThread' – ssantos

Répondre

1

Vous avez trouvé la réponse ici - cet article peut être marqué comme doublon. : Android: SurfaceView ignoring postInvalidate()?

Pour une raison quelconque, SurfaceView utilise par défaut "il ne dessine pas". Appeler SetWillNotDraw(false) dans SurfaceCreated() correctifs.