2011-02-07 2 views
0

J'essaye de dessiner un graphique dans Android. Je veux que le graphique s'adapte à la taille d'écran actuelle, donc au lieu de les définir explicitement dans les constantes, j'obtiens la taille d'un LinearLayout qui est destiné à contenir le graphique. Cependant, il y a un problème qu'il n'est pas possible d'obtenir des tailles dans l'activité onCreate(), donc j'utilise un LinearLayout personnalisé avec onSizeChanged() surchargé. Je l'ai inclus dans la disposition avec:Dessiner un graphique, ne peut pas voir l'image résultante

view class="com.nnevod.loggraph.graph$GraphDisplayLayout" 
    android:layout_height="fill_parent" 
    android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_weight="1" 
    android:background="@color/White" 

J'ai omis des parenthèses angulaires. Dans nSizeChanged(), les dimensions de la vue sont lues, puis tout est fait comme décrit dans de nombreux exemples de graphiques: un bitmap est créé, transmis à une classe de dessin de graphes, un ImageView est créé, est défini avec le Bitmap, puis ajouté au LinearLayout personnalisé.

Le problème est que l'image du graphique n'est pas visible. Cependant, si j'essaie de l'inspecter avec HierarchyViewer, l'image devient visible. Si je coupe-colle le code de onSizeChanged() à l'activité onCreate(), sans utiliser les dimensions prédéfinies au lieu des mesures, tout est bien affiché.

Donc, ma question est ce que je fais mal? J'ai supposé que soit j'utilise un mauvais contexte dans onSizeChanged() personnalisé, ou il n'est pas possible de mettre à jour la vue à partir de là, et je devrais en quelque sorte passer les dimensions mesurées à l'activité et faire la pièce jointe du Bitmap dans certains des méthodes de l'activité. Bien que dans la partie contexte, j'ai essayé d'utiliser tous les contextes disponibles, y compris en utilisant le contexte de l'activité, en vain.

Si nécessaire, je fournirai plus de code.

Répondre

1

J'ai eu un problème similaire une fois, et on m'a dit que ce que la visionneuse Hiérarchie fait est un requestLayout(). Donc, m'a-t-on dit, j'ai probablement oublié de l'appeler quelque part, mais je ne pense pas que je l'ai fait. Plus tard, j'ai trouvé qu'une situation similaire a été signalée comme un bug, étant une solution de contournement trouvant le moyen d'appeler requestLayout() quelque part. C'était étrange parce que dans certaines conditions la chose a fonctionné (en ajoutant une vue aléatoire ici et là, ou en mettant à jour le dessin). Quoi qu'il en soit, à la fin, j'ai préféré créer une vue personnalisée qui dessinait directement ce dont j'avais besoin (et comme le dessin arrive après onMeasure, il n'y a pas de problème pour faire un dessin adaptatif).

(drôle c'est à nouveau sur les graphiques!)

références (1) et (2).