2010-02-11 14 views
0

J'ai une activité qui contient plusieurs vues. L'un d'entre eux est un GLSurfaceView. Cette GLSurfaceView affiche de jolis effets 3D basés sur ce qui est sélectionné dans les autres vues de mon activité (ListViews, EditTexts, etc.). Le problème que je rencontre est que je ne sais pas quand mon GLSurfaceView a été entièrement initialisé à partir de l'activité.Comment savoir si GLSurfaceView est entièrement initialisé à partir de l'activité?

J'ai tout d'abord tenté de transmettre mes données graphiques à mon GLSurfaceView dans la méthode onCreate() de mon Activity peu après la méthode setContentView(). Cela a fonctionné correctement sur l'émulateur, mais sur plusieurs périphériques, cela échoue avec des exceptions de pointeur nul pour tenter d'accéder à des objets qui n'avaient même pas encore été construits. J'ai supposé que c'était parce que mon point de vue n'avait pas encore été gonflé et peut-être que gonfler les vues prend plus de temps sur mes appareils.

J'ai dispersé quelques logs juste pour voir l'ordre des choses et j'ai trouvé que la méthode onSurfaceCreated de mon GLSurfaceView est appelée bien après la méthode onFinishInflate de GLSurfaceView.

Alors maintenant je cherche un bon moyen de déterminer dans mon activité quand la méthode onSurfaceCreated de mon GLSurfaceView a été appelée afin que je puisse dire à mon GLSurfaceView quoi dessiner en toute sécurité.

Répondre

0

Sous-classe GLSurfaceView ("Pour gérer un événement, vous allez généralement sous-classer GLSurfaceView et remplacer la méthode appropriée, comme avec n'importe quelle autre vue"). Vous pouvez également enregistrer un SurfaceHolder.Callback avec le Surf enter code here aceHolder - qui fonctionne avec SurfaceViews pour savoir quand leurs surfaces ont été créées.