2012-01-07 4 views
2

J'ai créé une vue personnalisée et l'ai ajoutée à ma mise en page dans le fichier xml. J'essaye d'actualiser la vue personnalisée avec un événement de clic mais je ne peux pas comprendre comment appeler la méthode onDraw d'une classe différente. invalidate et postInvalidate n'actualisent pas l'affichage personnalisé.Comment appeler onDraw à partir d'une classe différente?

Répondre

4

Vous devez créer une méthode dans votre vue qui prend les modifications et les appels invalidés de l'intérieur de votre vue.

public void setTextSize (int size) { 
     mTextSize = size; 
     invalidate(); 
} 

Fonctionne parfaitement pour moi.

0

certainement vous devriez appeler View.invalidate(). Assurez-vous que la vue est visible et qu'elle a mesuré les dimensions, c'est-à-dire assurez-vous que la vue getMeasuerdWidth() et getMeasuerdHeight() renvoient 0.

Vous mettez un message de journal au début de votre méthode de retrait pour vérifier que cela fonctionne. mais définitivement devrait être invalide(). Peut-être que vos données ne changent pas?

0

invalide voir les résultats appelant la méthode onDraw(). En appelant customViewClassName.invalidate() à partir de votre classe différente va à l'appel de la méthode onDraw().

0

Je voudrais utiliser un gestionnaire de messages pour réaliser un tel mécanisme. Dans votre classe View personnalisée, créez un Handler, puis passez une référence de ce gestionnaire au bouton (par exemple dans l'événement onCreate de votre Activity), puis utilisez le mécanisme sendMessage()/handleMessage() pour communiquer entre le bouton et le autre vue.

Cette méthode permettra également à tous les autres composants d'interagir agréablement avec votre vue personnalisée si vous en avez besoin.

+0

Quel message dois-je envoyer de ma vue personnalisée à ma classe d'activités? Je ne peux apparemment pas envoyer un appel invalider ou une toile. – user1134179

Questions connexes