rsuinux Posté(e) 26 août 2012 Share Posté(e) 26 août 2012 bonjour, je débute avec le systeme android, et j'aimerai dessiner dans un framelayout. Mon xml de l'interface ce présente (en partie) comme ça: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorHoriz" android:gravity="center" android:orientation="horizontal" > ../... mes boutons ici .../... <FrameLayout android:id="@+id/Tableadessin" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="false" android:layout_below="@id/EditTextValeurX" android:foreground="@color/color_tableadessin" > </FrameLayout> </RelativeLayout> Ma question est de savoir si je peux dessiner dans ce framelayout ou s'il faut le transformer "en surface ou je peux dessiner"? Je veux juste tracer 2 axes (x et y ) puis des données de type ligne brisées. Et evidemment, je n'y arrive pas trop... Sinon, je ne serais pas là. Tout mon code fonctionne, la partie algorithmique sans soucis, (je verifié avec du log.d ) reste la partie graphique à faire :) Merci si vous avez des docs à me proposer. Rémi. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Substitut Posté(e) 28 août 2012 Share Posté(e) 28 août 2012 Je pense qu'il doit falloir intégrer un Canvas a ton FrameLayout pout dessiner quelque chose dedans. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rsuinux Posté(e) 28 août 2012 Auteur Share Posté(e) 28 août 2012 Merci substitut pour ton avis. J'avoue avoir quelques difficultés à dessiner juste dans mon FrameLayout. Toutes les docs que j'ai pu trouver font références à une méthodologie pour dessiner sur 'tout l'écran' pas juste sur une partie. Quand on debute avec android et le dessin, c'est assez déconcertant! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rsuinux Posté(e) 31 août 2012 Auteur Share Posté(e) 31 août 2012 (modifié) j'avance dans mon apprentissage. A présent, j'arrive à dessiner dans mon framelayout, mais j'ai quelques soucis... oh, pas grand chose. J'explique: Dans mon code, je fais quelques initialisations, dont mon framelayout: .../... FrameLayout montableau; .../... montableau = (FrameLayout) findViewById(R.id.Tableadessin); .../... puis je continue mon code jusqu'à mon écouteur de bouton: Calcul.setonclickListener( new onclickListener() { public void onclick ( View v) { affichage_axes(); // ici ça marche au poil! .../... ma méthode affichage_axes trace juste les axes x et y dans mon framelayout. Jusque là, tout va bien. En plus, dans affichage_axes, j'utilise dx=montableau.getWidth(); et dy=montableau.getHeight(); pour connaitre les largeur et hauteur de ma surface de dessin. Jusque la, tout va bien. Mais, j'ai voulu bouger mon appel à affichage_axes(); juste après la déclaration de montableau , comme ceci: .../... montableau = (FrameLayout) findViewById(R.id.Tableadessin); affichage_axes(); // marche plus!!! bouhhhh!!! .../... De plus, dx et dy sont systématiquement à zéro. J'en viens à me dire qu'il n'y a pas encore eu d'initialisation de l'écran, n'est-ce pas? Et donc, comment puis-je contourner (est-ce possible?) ce petit soucis? Sinon, je laisse comme ça! Rémi. Modifié 31 août 2012 par rsuinux Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 31 août 2012 Share Posté(e) 31 août 2012 Effectivement, il ne passe rien, car tu appelles ta méthode d'affichage depuis onCreate (je suppose), et donc à un moment où ton Activity n'est pas encore affichée (d'où les dimensions à 0 par ex.) D'une manière générale, Android étant événementiel, il ne faut dessiner que lorsque le système te le demande, et non quand toi tu veux. Dans ton cas, une solution (il y en a d'autres) serait d'implémenter un objet de type View qui te soit spécifique, et qui prendrait en charge le dessin de ta zone d'affichage. Ainsi, ensuite, Android peut s'appuyer sur cet objet pour dessiner l'écran quand il en a besoin Donc: - tu implémentes une nouvelle classe, qui hérite de View, dans laquelle tu redéfinis la méthode onDraw, méthode qui reçoit en paramètre un Canvas que tu peux utiliser pour dessiner. onDraw sera automatiquement appelée par Android. - dans ton layout, tu remplaces le FrameLayout par ton nouvel objet (remplacer le tag FrameLayout par un tag ayant pour nom celui de ta classe, package compris) - dans ton Activity, tu récupères maintenant une instance de ton nouvel objet au lieu du FrameLayout (si tu en as besoin) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rsuinux Posté(e) 2 septembre 2012 Auteur Share Posté(e) 2 septembre 2012 désolé de ne pas avoir répondu plus vite, j'étais pris par des évènements médiévaux.... Je reviens à la Vraie vie!!!! (pas de prise réseau ni de wifi au XIIIème sciècle !!!! ) je vais donc tester ta solution. Merci de ton avis. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cuillère Posté(e) 19 septembre 2012 Share Posté(e) 19 septembre 2012 Tu peux faire ça simplement comme chpil l'a dit plus haut : La view : package com.abecker.androidsandbox; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; public class TableauView extends View{ public TableauView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // //faire les opérations de dessins ici // } } Le layout xml : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.your.package.TableauView android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.