pour une SurfaceView qui je l'ai fait à partir du code, j'ai pu remplacer onDraw()
.
Mais comment ignorer que onDraw()
à partir d'un SurfaceView
qui est définie dans une mise en page XML? est-il possible d'accéder à la draw()
méthode?
OriginalL'auteur Fugogugo | 2011-03-05
Vous ne pouvez pas accéder à la onDraw-méthode d'une SurfaceView instance a déclaré et a ajouté à la mise en page comme ceci:
La déclaration ci-dessus crée une instance de android.vue.SurfaceView et l'ajoute à votre disposition. Vous ne pouvez pas modifier le comportement de la onDraw-méthode sur cette instance, pas plus que vous pouvez modifier le code de comportement dans tous les autres déjà compilé classe.
Pour obtenir ce que vous demandez, vous pouvez créer votre propre sous-classe de SurfaceView:
Et puis, pour l'ajouter à votre disposition au lieu de l'original à la vanille SurfaceView, il vous suffit de consulter le nom pleinement qualifié de la classe comme un élément XML dans votre mise en page:
Votre SurfaceView sous-classe doit déclarer un constructeur qui prend
Context
etAttributeSet
en tant que paramètres. Et n'oubliez pas que votre surface d'affichage devrait mettre en œuvreSurfaceHolder.Callback
et s'inscrire lui-même à son SurfaceHolder:La méthode ne sera pas appelé automatiquement, mais vous pouvez assurez-vous que l'initiale de l'état de votre point de vue est établi lorsque la surface d'affichage est initialisé. Un rappel sera fait à
surfaceCreated
où vous pouvez appeler la méthode:Vôila!
Regardez encore le fragment de code XML ci-dessus. Le réel de l'élément XML est le nom de votre classe. Pas très intuitif ou XML-ish, c'est sûr.
Je ne comprends pas? est-ce à dire que j'ai à "importer" mon nom de paquet ou quelque chose??
Vous n'avez pas "importer" votre nom de package, il vous suffit de pointer votre propre implemntation de SurfaceView, qui sera instancié et ajouté à votre disposition au lieu de la vanille SurfaceView. J'ai édité la réponse ci-dessus pour clarifier cela. J'espère que ça aide.
merci pour la réponse détaillée @svjson
OriginalL'auteur svjson