2010-10-22 21 views
2

J'ai une question conceptuelle de se demander:tableau Dessin dans une boîte de dialogue

J'ai créé une boîte de dialogue personnalisée (étend la boîte de dialogue) et je veux dessiner un graphique (données dynamique et non statique) dans le tiers supérieur de la boîte de dialogue .

Quelle est la meilleure (seulement?) Façon d'aborder cela? A) Obtenez une toile à la boîte de dialogue et dessinez-y? On dirait que j'ai besoin d'accéder au tirage du dialogue, oui, ou est-ce que je peux le faire en dehors du tirage? B) Sous-classer une vue dans la disposition de dialogue (par exemple LinearLayout) et remplacer son affichage et dessiner le graphique?

C) Autre? J'ai lu que l'une approche serait de dessiner à un bitmap et puis blt (ou équivalent) à la toile. Cela ressemble plus à ce que je veux faire, car une fois que je crée le graphique, je n'ai pas besoin de le modifier (pas d'interaction directe de l'utilisateur).

Je n'ai pas encore trouvé de bon exemple de code qui traite du dessin personnalisé dans une boîte de dialogue, donc si quelque chose me manque, un exemple serait génial.

Merci beaucoup,

Rich

+1

Je n'ai pas d'expérience spécifique dans les boîtes de dialogue de dessin, de sorte qu'il peut être possible. Cependant, vous pouvez avoir un temps plus facile si vous utilisez une activité standard et lui donnez le thème de dialogue. Cela fait ressembler à un dialogue, mais avec toute la puissance d'une activité. –

+0

Hmm semble être une bonne idée, je voudrais essayer les deux, et signaler si fonctionne. –

Répondre

1

résolu.

Ma solution était un hybride de B/C ci-dessus. Comme j'avais besoin d'accéder à la méthode draw() de la vue, j'ai créé ma propre sous-classe d'un ImageView (par exemple, MyView). De l'intérieur du draw(), je peux obtenir la taille dynamique de l'ImageView telle qu'elle apparaît dans la boîte de dialogue. Compte tenu de la taille, je peux maintenant effectuer des tirages à l'échelle de la taille personnalisée d'ImageView dans la boîte de dialogue.

Je devais me rappeler d'utiliser la syntaxe XML de vue personnalisée appropriée dans la disposition de dialogue (par exemple "com.avaliant.dialogtest.MyView" pour remplacer "ImageView"). Et, bien sûr, dans ma classe de dialogue, je devais mettre à voir la classe appropriée de vue:

MyView test = (MyView)dialogView.findViewById(R.id.test); 

assez facile une fois que je compris pourquoi je devais faire ce que je devais faire :).

Rich

0

Je l'ai fait comme ceci: Nous sommes allés avec la création d'une activité régulière. puis dessinez ma carte dans cette activité comme d'habitude. alors changé le extends AppCompactActvity juste extends Activity, ensuite ajouté le thème de cette boîte de dialogue dans mon fichier AndroidManifest.XML:

android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"