IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Dessiner sur un Canvas


Sujet :

Composants graphiques Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut Dessiner sur un Canvas
    Bonjour à tous,

    Une question probablement basique d'un grand débutant ... que je me résoud à poser après avoir cherché (longtemps) et essayé plein de trucs .....

    Ci dessous le code d'une appli me permettant de vérifier ma capacité à réaliser sous Android une appli que j'ai développé sur un PALM et dont je maitrise toute la partie calcul, algorithmes, etc ...

    Je teste donc ma capacité à placer des botons et des champs où je veux, à récupérer et exploiter des valeurs saisies, afficher des résultats, etc ... et, à dessiner des formes géométriques calculées réalisées avec des cercles et des segments de droites.

    Et après avoir transpiré sur le reste, c'est maintenant pour le dessin que ça coince, car, vous l'aurez compris, je suis très loin de penser en ANDROID !!!

    Voici le code, l'écran est défini dans main.xml, et ça cela marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
     
    package org.HSI03.riAndroid;
     
    import org.HSI03.riAndroid.R;
     
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.widget.EditText;
    //import android.widget.TextView;
    import android.widget.Button;
    import android.view.View;
     
    public class Hsi03Main extends Activity
    {
    	// déclaration des objets dont on aura besoin
    	private Button bGoto;
    	private EditText fieldGoto;
    	private EditText fieldRoute;
    	private EditText fieldObs;
    	private DessineView dessinCourant ;
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initSaisies(); // le lancement de ces méthodes se fait ici pour l'essai
            calculate() ;
            dessinCourant = new DessineView(this);
            //dessinCourant.
        }
        private void initSaisies()// méthode d'initialisation
    	{
        	// récupération des objets champs et bouton avec leur ressources du main.xml
        	fieldGoto= (EditText)findViewById(R.id.fieldGoto);
        	fieldRoute = (EditText)findViewById(R.id.fieldRoute);
        	fieldObs = (EditText)findViewById(R.id.fieldObs);
        	bGoto = (Button)findViewById(R.id.bGoto);
        	// mise en place du listener du bouton qui lance la méthode calculate()
        	bGoto.setOnClickListener(new Button.OnClickListener()
        	{ public void onClick (View v){ calculate(); }});
     
    	}
     
        private void calculate()
    	{
    		double valGoto = Double.parseDouble(fieldGoto.getText().toString());
    		double valRoute = Double.parseDouble(fieldRoute.getText().toString());
    		double vTotal = valGoto + valRoute ;
    		fieldObs.setText(Double.toString(vTotal));
    	}
     
        static public class DessineView extends View
        { 
        	public DessineView(Context context)
        	{ 
        		super(context); 
        	} 
        	@Override 
        	protected void onDraw(Canvas canvas)
        	{ 
        	// Drawing commands go here 
        		float xA = 10;
        		float yA = 10;
        		float xB = 100;
        		float yB = 100;
        		Paint ColTrace = new Paint(); 
        		ColTrace.setColor(Color.BLUE); 
        		Paint ColFond = new Paint(); 
        		ColFond.setColor(Color.WHITE); 
        		canvas.drawRect(0, 0, 320, 400, ColFond);
        		canvas.drawLine(xA, yA, xB,yB ,ColTrace); 
     
        	} 
        }
    }
    Quand je lance l'application dans l'émulateur, le bouton et les champs s'affichent, la saisie et le calcul fonctionnent, mais aucune ligne n'apparait pas plus qu'un fond blanc ....

    Qu'ai-je oublié ?
    Qu'ai-je fait de travers ?
    Oui, l'imagination des débutants est sans limite !

    Merci de votre aide ...

  2. #2
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Cette declaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dessinCourant = new DessineView(this);
    ne suffit pas pour afficher ; il faut ecrire setContentView( dessinCourant) pour afficher les lignes; mais ds ce cas les champs de textes, les boutons ne seront plus afficher

    Pour les afficher ensemble il faut declarer un layout en code java ou ajouter tout simplement DessineView en layout.xml

    <org.HSI03.riAndroid.DessineView
    les parametres//

    />

    setContentView(r.layout.main) affichera alors tous ensemble

  3. #3
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Ou alors si tu souhaites garder le code tel que tu l'as fait, et juste afficher ton composant de dessin en pluss, tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initSaisies(); // le lancement de ces méthodes se fait ici pour l'essai
            calculate() ;
            dessinCourant = new DessineView(this);
            //dessinCourant.
     
            LinearLayout monMain = (LinearLayout)findViewById(R.layout.main);
            monMain.addView(dessinCourant);
        }
    Bien sûr adapte le type de "monMain" en fonction de ce que tu as déclaré dans ton XML...
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  4. #4
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Exacte c'est ce que je voudrais dire aussi

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Bonjour à vous deux et merci de votre aide,

    Bon j'ai expérimenté et continué à chercher.
    J'ai vérifié que le fait de rajouter
    setContentView( dessinCourant);
    me permettait de voir le tracé en bleu sur fond blanc mais en perdant le reste. C'est déjà une grande victoire !

    Par contre, je n'ai pas compris la façon de déclarer DessineView qui est une classe de ma fabrication dans le main.xml (de layers) ...

    J'ai essayé la méthode de MrDuChnok, qui consiste, si j'ai bien compris à ajouter l'instance de ma classe DessineView au layer défini dans mon main.xml.

    J'ai utilisé un AbsoluteLayer parceque c'est plus facile pour faire mes essais, mais j'ai compris que ce n'était pas le top.
    Cela donne ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    	@Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initSaisies(); // le lancement de ces méthodes se fait ici pour l'essai
            calculate() ;
            dessinCourant = new DessineView(this);
            //setContentView( dessinCourant);
            AbsoluteLayout monMain = (AbsoluteLayout)findViewById(R.layout.main);
            monMain.addView(dessinCourant);
     
     
        }
    et cela plante l'application avec le message qui montre la sortie obligatoire ...

    Quand j'élimine la ligne :
    monMain.addView(dessinCourant);
    cela ne plante pas mais le tracé n'est pas affiché. Normal !

    Eclipse ne montre pas d'erreur en dehors du fait que Absolutelayer est deprecated (obsolete ?)

    Bon, je sens que j'avance, mais il faut pousser encore un peu !

    Merci d'avance....

  6. #6
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Je pense que c'est parce que tu n'as pas rajouté de paramètres lorsque tu as ajouté ton composant (DessineView) à ton layout principale (AbsoluteLayout).

    http://developer.android.com/referen...outParams.html

    Sinon voir les tutoriels et cours de formation pour apprendre la prog Android: http://android.developpez.com/cours/

    Pour en être sûr, je t'invite à consulter la view "LogCat" sous Eclipse. Elle te permettra de suivre les logs de ton application et surtout de voir les exceptions remontées...

    Si tu n'arrives pas à résoudre ton soucis, colle ici ton exception (ainsi que ton xml contenant le layout, ça peut aider)

    Bon courage
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  7. #7
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Ce que MrDuChnok a dit est une solution mais moi je vais te donner une autre solution avec les AbsoluteLayout.


    Copie et colle ce code dans ton fichier main.xml [ avec AbsoluteLayout]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <org.HSI03.riAndroid.DessineView
     android:id="@+id/mondession"
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_y="300px"
     android:layout_x="10px"
    />
    Et met en commentaire tout ces lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     dessinCourant = new DessineView(this);
            //setContentView( dessinCourant);
            AbsoluteLayout monMain = (AbsoluteLayout)findViewById(R.layout.main);
            monMain.addView(dessinCourant);
    Donc ta methode on create doit etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initSaisies(); // le lancement de ces méthodes se fait ici pour l'essai
            calculate() ;
        }
    Ou bien comme MrDuChnok colle ton main.xml ici!!!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Bonjour et encore merci à vous deux ...

    Les progrès ne sont pas très sensibles ...

    Le main.xml, ci-dessous, complété ainsi que proposé par jahbromo Cette adjonction provoque d'ailleurs un plantage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/myAbsLay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
     
        <org.HSI03.riAndroid.DessineView
     	android:id="@+id/mondession"
     	android:layout_width="wrap_content" 
     	android:layout_height="wrap_content" 
     	android:layout_y="300px"
     	android:layout_x="10px"
    	/>
     
    <Button
    	android:id="@+id/bGoto"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="GOTO"
        android:layout_x="1px" 
        android:layout_y="390px" 
        />
    <EditText
    	android:text="200"
    	android:id="@+id/fieldGoto"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="60px" 
        android:layout_y="390px" >
    	</EditText>
     
    	<TextView  
        android:id="@+id/libRoute"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="  ROUTE"
        android:layout_x="110px" 
        android:layout_y="390px"
        />
    <EditText
    	android:text="180"
    	android:id="@+id/fieldRoute"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="165px" 
        android:layout_y="390px">
    	</EditText>
     
    <TextView  
        android:id="@+id/libObs"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="  OBS"
        android:layout_x="215px" 
        android:layout_y="390px"
        />
    <EditText
    	android:text="150"
    	android:id="@+id/fieldObs"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="250px" 
        android:layout_y="390px">
    	</EditText>
     
    </AbsoluteLayout>
    Voilà le LogCat d'un lancement avec ledit plantage ...
    02-05 18:08:44.925: DEBUG/AndroidRuntime(549): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
    02-05 18:08:44.935: DEBUG/AndroidRuntime(549): CheckJNI is ON
    02-05 18:08:45.195: DEBUG/AndroidRuntime(549): --- registering native functions ---
    02-05 18:08:45.465: DEBUG/ddm-heap(549): Got feature list request
    02-05 18:08:46.105: DEBUG/PackageParser(52): Scanning package: /data/app/vmdl65629.tmp
    02-05 18:08:46.215: INFO/PackageManager(52): Removing non-system package:org.HSI03.riAndroid
    02-05 18:08:46.215: DEBUG/PackageManager(52): Removing package org.HSI03.riAndroid
    02-05 18:08:46.215: DEBUG/PackageManager(52): Activities: org.HSI03.riAndroid.Hsi03Main
    02-05 18:08:46.305: DEBUG/PackageManager(52): Scanning package org.HSI03.riAndroid
    02-05 18:08:46.315: INFO/PackageManager(52): /data/app/vmdl65629.tmp changed; unpacking
    02-05 18:08:46.325: DEBUG/installd(32): DexInv: --- BEGIN '/data/app/vmdl65629.tmp' ---
    02-05 18:08:46.605: DEBUG/dalvikvm(555): DexOpt: load 54ms, verify 62ms, opt 2ms
    02-05 18:08:46.615: DEBUG/installd(32): DexInv: --- END '/data/app/vmdl65629.tmp' (success) ---
    02-05 18:08:46.615: DEBUG/PackageManager(52): Activities: org.HSI03.riAndroid.Hsi03Main
    02-05 18:08:46.635: DEBUG/ActivityManager(52): Uninstalling process org.HSI03.riAndroid
    02-05 18:08:46.635: DEBUG/ActivityManager(52): Force removing process ProcessRecord{43daadd0 532:org.HSI03.riAndroid/10027} (org.HSI03.riAndroid/10027)
    02-05 18:08:46.655: INFO/Process(52): Sending signal. PID: 532 SIG: 9
    02-05 18:08:46.675: INFO/WindowManager(52): WIN DEATH: Window{43c9a140 org.HSI03.riAndroid/org.HSI03.riAndroid.Hsi03Main paused=false}
    02-05 18:08:46.766: WARN/UsageStats(52): Unexpected resume of com.android.launcher while already resumed in org.HSI03.riAndroid
    02-05 18:08:46.815: DEBUG/ActivityManager(52): Received spurious death notification for thread android.os.BinderProxy@43c27ba0
    02-05 18:08:46.885: WARN/InputManagerService(52): Got RemoteException sending setActive(false) notification to pid 532 uid 10027
    02-05 18:08:47.095: INFO/installd(32): move /data/dalvik-cache/data@app@vmdl65629.tmp@classes.dex -> /data/dalvik-cache/data@app@org.HSI03.riAndroid.apk@classes.dex
    02-05 18:08:47.105: DEBUG/PackageManager(52): New package installed in /data/app/org.HSI03.riAndroid.apk
    02-05 18:08:47.255: DEBUG/dalvikvm(52): GC freed 10714 objects / 622624 bytes in 143ms
    02-05 18:08:47.425: DEBUG/AndroidRuntime(549): Shutting down VM
    02-05 18:08:47.425: DEBUG/dalvikvm(549): DestroyJavaVM waiting for non-daemon threads to exit
    02-05 18:08:47.435: DEBUG/dalvikvm(549): DestroyJavaVM shutting VM down
    02-05 18:08:47.435: DEBUG/dalvikvm(549): HeapWorker thread shutting down
    02-05 18:08:47.445: DEBUG/dalvikvm(549): HeapWorker thread has shut down
    02-05 18:08:47.445: DEBUG/jdwp(549): JDWP shutting down net...
    02-05 18:08:47.445: INFO/dalvikvm(549): Debugger has detached; object registry had 1 entries
    02-05 18:08:47.455: DEBUG/dalvikvm(549): VM cleaning up
    02-05 18:08:47.475: DEBUG/ActivityManager(52): Uninstalling process org.HSI03.riAndroid
    02-05 18:08:47.485: ERROR/AndroidRuntime(549): ERROR: thread attach failed
    02-05 18:08:47.515: DEBUG/dalvikvm(549): LinearAlloc 0x0 used 621836 of 5242880 (11%)
    02-05 18:08:47.825: DEBUG/dalvikvm(52): GC freed 2794 objects / 175896 bytes in 191ms
    02-05 18:08:47.875: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f0700e5
    02-05 18:08:47.905: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f020031
    02-05 18:08:47.905: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f020030
    02-05 18:08:47.905: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f050000
    02-05 18:08:47.965: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f060001
    02-05 18:08:48.005: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f060000
    02-05 18:08:48.185: DEBUG/dalvikvm(101): GC freed 212 objects / 8144 bytes in 330ms
    02-05 18:08:48.285: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f0700e5
    02-05 18:08:48.285: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f020031
    02-05 18:08:48.285: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f020030
    02-05 18:08:48.285: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f050000
    02-05 18:08:48.295: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f060001
    02-05 18:08:48.315: WARN/ResourceType(52): Resources don't contain package for resource number 0x7f060000
    02-05 18:08:48.945: DEBUG/AndroidRuntime(560): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
    02-05 18:08:48.955: DEBUG/AndroidRuntime(560): CheckJNI is ON
    02-05 18:08:49.205: DEBUG/AndroidRuntime(560): --- registering native functions ---
    02-05 18:08:49.485: DEBUG/ddm-heap(560): Got feature list request
    02-05 18:08:50.165: INFO/ActivityManager(52): Starting activity: Intent { flg=0x10000000 cmp=org.HSI03.riAndroid/.Hsi03Main }
    02-05 18:08:50.205: WARN/UsageStats(52): Failed to persist new stats
    02-05 18:08:50.255: INFO/ActivityManager(52): Start proc org.HSI03.riAndroid for activity org.HSI03.riAndroid/.Hsi03Main: pid=566 uid=10027 gids={}
    02-05 18:08:50.265: DEBUG/AndroidRuntime(560): Shutting down VM
    02-05 18:08:50.265: DEBUG/dalvikvm(560): DestroyJavaVM waiting for non-daemon threads to exit
    02-05 18:08:50.287: DEBUG/dalvikvm(560): DestroyJavaVM shutting VM down
    02-05 18:08:50.287: DEBUG/dalvikvm(560): HeapWorker thread shutting down
    02-05 18:08:50.287: DEBUG/dalvikvm(560): HeapWorker thread has shut down
    02-05 18:08:50.287: DEBUG/jdwp(560): JDWP shutting down net...
    02-05 18:08:50.287: INFO/dalvikvm(560): Debugger has detached; object registry had 1 entries
    02-05 18:08:50.295: DEBUG/dalvikvm(560): VM cleaning up
    02-05 18:08:50.325: ERROR/AndroidRuntime(560): ERROR: thread attach failed
    02-05 18:08:50.395: DEBUG/dalvikvm(560): LinearAlloc 0x0 used 637292 of 5242880 (12%)
    02-05 18:08:50.595: DEBUG/ddm-heap(566): Got feature list request
    02-05 18:08:51.145: DEBUG/AndroidRuntime(566): Shutting down VM
    02-05 18:08:51.145: WARN/dalvikvm(566): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    02-05 18:08:51.145: ERROR/AndroidRuntime(566): Uncaught handler: thread main exiting due to uncaught exception
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.HSI03.riAndroid/org.HSI03.riAndroid.Hsi03Main}: android.view.InflateException: Binary XML file line #7: Error inflating class org.HSI03.riAndroid.DessineView
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2497)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1848)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.os.Handler.dispatchMessage(Handler.java:99)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.os.Looper.loop(Looper.java:123)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.app.ActivityThread.main(ActivityThread.java:4338)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at java.lang.reflect.Method.invokeNative(Native Method)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at java.lang.reflect.Method.invoke(Method.java:521)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at dalvik.system.NativeStart.main(Native Method)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class org.HSI03.riAndroid.DessineView
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.app.Activity.setContentView(Activity.java:1622)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at org.HSI03.riAndroid.Hsi03Main.onCreate(Hsi03Main.java:35)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2444)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): ... 11 more
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): Caused by: java.lang.ClassNotFoundException: org.HSI03.riAndroid.DessineView in loader dalvik.system.PathClassLoader@43b74718
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.view.LayoutInflater.createView(LayoutInflater.java:466)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
    02-05 18:08:51.175: ERROR/AndroidRuntime(566): ... 20 more
    02-05 18:08:51.225: INFO/Process(52): Sending signal. PID: 566 SIG: 3
    02-05 18:08:51.225: INFO/dalvikvm(566): threadid=7: reacting to signal 3
    02-05 18:08:51.225: ERROR/dalvikvm(566): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
    02-05 18:09:00.255: WARN/ActivityManager(52): Launch timeout has expired, giving up wake lock!
    02-05 18:09:00.715: WARN/ActivityManager(52): Activity idle timeout for HistoryRecord{43c9bae0 org.HSI03.riAndroid/.Hsi03Main}
    02-05 18:09:05.815: DEBUG/dalvikvm(101): GC freed 3023 objects / 173008 bytes in 86ms
    02-05 18:09:09.045: INFO/Process(566): Sending signal. PID: 566 SIG: 9
    02-05 18:09:09.065: INFO/ActivityManager(52): Process org.HSI03.riAndroid (pid 566) has died.
    02-05 18:09:09.165: WARN/UsageStats(52): Unexpected resume of com.android.launcher while already resumed in org.HSI03.riAndroid
    02-05 18:09:09.355: ERROR/gralloc(52): [unregister] handle 0x46dae0 still locked (state=40000001)
    02-05 18:09:09.435: WARN/InputManagerService(52): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43cd14a0
    02-05 18:09:14.635: DEBUG/dalvikvm(213): GC freed 109 objects / 4488 bytes in 84ms


    Il y a un truc que je ne comprends pas : pour obtenir un tracé, il faut bien créer une instance de ma classe DessineView ... chose que tu me fais supprimer dans le on create.

    Dur dur de penser en JAVA !

  9. #9
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Bonjour pour te repondre definitivement voici comment on fait

    1. J'ai crée un projet nommé Developpez; package : org.developpez.com;
    2. Creer une classe qui s'etend de Activity nommé : Developpez;
    le nom de l'application est : Developpez

    2 Creer une classe qui s'etend de View et qui va dessinez tes lignes et autres

    3. J'ai crée un fichier layout xml nommer : developpez.xml


    Classe qui s'etend de Activity :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    package org.developpez.com;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
     
     
              /*
    	 * SIDIBE  SIDIBE Malian Student, jahbromo@gmail.com
    	 * http://jahbromo.blogspot.com/
     
    	 */
     
    public class Developpez extends Activity {
     
    	private Button bGoto;
    	private EditText fieldGoto;
    	private EditText fieldRoute;
    	private EditText fieldObs;
    	private DessineView dessinCourant ;
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.developpez);
     
            initSaisies();
            calculate();
        }
        private void initSaisies()// méthode d'initialisation
    	{
        	// récupération des objets champs et bouton avec leur ressources du main.xml
        	fieldGoto= (EditText)findViewById(R.id.fieldGoto);
        	fieldRoute = (EditText)findViewById(R.id.fieldRoute);
        	fieldObs = (EditText)findViewById(R.id.fieldObs);
        	bGoto = (Button)findViewById(R.id.bGoto);
        	// mise en place du listener du bouton qui lance la méthode calculate()
        	bGoto.setOnClickListener(new Button.OnClickListener()
        	{ 
     
    		@Override
    		public void onClick(View arg0) {
    			calculate();
     
    		}});
     
    	}
     
        private void calculate()
    	{
    		double valGoto = Double.parseDouble(fieldGoto.getText().toString());
    		double valRoute = Double.parseDouble(fieldRoute.getText().toString());
    		double vTotal = valGoto + valRoute ;
    		fieldObs.setText(Double.toString(vTotal));
    	}
     
    }
    Classe qui dessine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    package org.developpez.com;
     
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.view.View;
     
     /*
    	 * SIDIBE  SIDIBE Malian Student, jahbromo@gmail.com
    	 * http://jahbromo.blogspot.com/
     
    	 */
    public class DessineView extends View {
     
     
     
     
     
     
    	public DessineView(Context context, AttributeSet attrs, int defStyle) {
    		super(context, attrs, defStyle);
     
    	}
     
    	public DessineView(Context context, AttributeSet attrs) {
    		super(context, attrs);
     
    	}
     
    	public DessineView(Context context) {
    		super(context);
     
    	}
     
    	@Override 
    	protected void onDraw(Canvas canvas)
    	{ 
     
    		float xA = 10;
    		float yA = 10;
    		float xB = 100;
    		float yB = 100;
    		Paint ColTrace = new Paint(); 
    		ColTrace.setColor(Color.BLUE); 
    		Paint ColFond = new Paint(); 
    		ColFond.setColor(Color.WHITE); 
    		canvas.drawRect(0, 0, 320, 400, ColFond);
    		canvas.drawLine(xA, yA, xB,yB ,ColTrace); 
    		canvas.drawText("Developpez.com", 20, 350, ColTrace);
     
    	} 
     
    }
    Le contenu de layout.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/myAbsLay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
     
        <org.developpez.com.DessineView
     	android:id="@+id/mondession"
     	android:layout_width="wrap_content" 
     	android:layout_height="wrap_content" 
     	android:layout_y="10px"
     	android:layout_x="10px"
    	/>
     
    <Button
    	android:id="@+id/bGoto"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="GOTO"
        android:layout_x="1px" android:layout_y="250px"/>
    <EditText
    	android:text="200"
    	android:id="@+id/fieldGoto"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="60px" android:layout_y="250px">
    	</EditText>
     
    	<TextView  
        android:id="@+id/libRoute"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="  ROUTE"
        android:layout_x="110px" android:layout_y="250px"/>
    <EditText
    	android:text="180"
    	android:id="@+id/fieldRoute"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="165px" android:layout_y="250px">
    	</EditText>
     
    <TextView  
        android:id="@+id/libObs"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="  OBS"
        android:layout_x="215px" android:layout_y="250px"/>
    <EditText
    	android:text="150"
    	android:id="@+id/fieldObs"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="250px" android:layout_y="250px">
    	</EditText>
     
    </AbsoluteLayout>

    Ci joint le capture de l'ecran de l'application et le code complet de l'application

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Merci jahbromo de te donner autant de mal pour un pauvre débutant de mon espèce ...

    En recréant l'application avec tes infos, cela a marché of course ! Je n'ai vu le ZIP qu'après ...

    Sauf que, ce que je cherche à faire est un tracé qui évolue de façon permanente en fonction de données extérieures (ou calculées à partir de), celles du GPS en l'occurrence.

    Au cours de mon essai je cherche à valider toutes les "briques" dont j'aurai besoin et en particulier cette capacité à redessiner (effacer et redessiner) au fur et à mesure que les données évoluent.
    Ce qui m'énerve le plus, c'est que j'ai réussi à le faire en JAVA avec SWING (je peux envoyer le code) et que je ne réussis pas à transposer sous ANDROID ..

    Pour le cas concret, il faudrait que le dessin se refasse avec le clic sur le bouton et en exploitant les données présentes dans les champs fieldGoto, fieldRoute et fieldObs .....

    Merci encore ...

  11. #11
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    Lors de ta mise à jour, si ce que tu souhaites est un nouveau dessin (et non pas celui d'avant avec un truc en plus), appelles la méthode invalidate() de ta classe qui hérites de View pour lui demander de se redessiner.
    Dans onDraw() il te suffit de définir le dessin en fonction de tes paramètres.

    Sinon si ce que tu souhaites est une mise a jour, dessines dans un bitmap à chaque fois et ton onDraw() ne fera que dessiner le bitmap dans le canvas.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Merci Viish ....

    Effectivement, je désire redessiner l'ensemble avec chaque jeu de nouvelles données.
    Les boutons et les champs ne doivent pas être affectés.

    Je ne trouve pas le moyen d'employer le invalidate().
    Cette méthode ne peut pas s'appliquer à mon DessineView qui hérite de View ...
    Si je fait une boucle pour simuler le mouvement dans le onDraw, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    			public void onDraw(Canvas canvas)
    			{
     
    				//fieldGoto= (EditText)findViewById(R.id.fieldGoto);
    				//double valGoto = Double.parseDouble(fieldGoto.getText().toString());
    				float xA = 10;
    				float yA = 10;
    				float xB = 180 ;//(float) valGoto;
    				float yB = 100;
    				Paint ColTrace = new Paint();
    				ColTrace.setColor(Color.RED);
    				Paint ColFond = new Paint();
    				ColFond.setColor(Color.WHITE);
    				canvas.drawRect(0, 0, 320, 400, ColFond);
    				canvas.drawLine(xA, yA, xB,yB ,ColTrace);
    				do
    				{
    					invalidate(0,0,200,200);
    					xA = xA +10;
    					yA = yA +10;
    					xB = xB + 10;
    					yB = yB + 5;
    					canvas.drawLine(xA, yA, xB,yB ,ColTrace);
     
    				}
    				while (xA < 100);
     
    			//canvas.drawText("Developpez.com", 20, 350, ColTrace);
    			}
    invalidate() ne produit pas d'erreur mais n'efface rien ......

  13. #13
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    Invalidate() ne propose pas de supprimer quoi que ce soit, elle indique juste à l'objet que tu désires le redessiner. En gros elle sert juste à forcer l'appel a onDraw();

    Pour pouvoir t'en servir, je te conseilles d'hériter directement d'ImageView, se sera plus simple.

    Et au passage Invalidate() ne prend pas d'arguments.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Merci de votre sollicitude ...

    J'avance, mais pas vite ....

    Partant de la proposition de jahbromo,
    -> j'ai créé la classe DessineView dans son propre fichier (apparemment c'est nécessaire afin que la déclaration dans le xml le trouve).
    -> j'ai créé une sous-classe dessineView de DessineView dans l'activité principale pour y mettre la partie ondraw qui pourra ainsi exploiter les données des champs.

    Suite aux conseils de Viish, j'ai trouvé la façon d'utiliser invalidate() et de faire une boucle avec le ondraw ce qui correspond bien à mon besoin futur de redessiner quand les données changent. J'ai fait une petite animation qui fonctionne parfaitement.

    Mais je (re)bute, certainement car je n'ai pas compris le fond, sur l'affichage simultané de l'écran défini dans le xml, avec ses champs et son bouton, et la surface sur laquelle je dessine.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    package org.developpez.com;
     
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
     
    public class Developpez extends Activity
    {
    	private Button bGoto;
    	private EditText fieldGoto;
    	private EditText fieldRoute;
    	private EditText fieldObs;
    	float xA = 10;
    	float yA = 10;
    	float xB = 90;
    	float yB = 90;
    	Paint ColTrace = new Paint();
    	Paint ColFond = new Paint();
     
    	//private DessineView dessinCourant ;
     
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState)
    	{
    		initSaisies();
                    super.onCreate(savedInstanceState);
    		dessineView dessinHsi = new dessineView(this);		
    		setContentView(R.layout.developpez);
                    AbsoluteLayout monMain = (AbsoluteLayout)findViewById(R.layout.developpez);
                    //monMain.addView(dessinHsi); // <<<< provoque le plantage
     
    		//setContentView(dessinHsi);
    	}
     
    	private void initSaisies()// méthode d'initialisation
    	{
    		// récupération des objets champs et bouton avec leur ressources du main.xml
    		fieldGoto= (EditText)findViewById(R.id.fieldGoto);
    		fieldRoute = (EditText)findViewById(R.id.fieldRoute);
    		fieldObs = (EditText)findViewById(R.id.fieldObs);
    		bGoto = (Button)findViewById(R.id.bGoto);
     
    		// mise en place du listener du bouton qui lance la méthode calculate()
    		bGoto.setOnClickListener(new Button.OnClickListener()
    		{ 
    			//@Override
    			public void onClick(View arg0)
    			{
    				//setContentView(R.layout.developpez);
    				calculate();			
    			}
    		});
    	}
     
    	private void calculate()
    	{
    		double valGoto = Double.parseDouble(fieldGoto.getText().toString());
    		double valRoute = Double.parseDouble(fieldRoute.getText().toString());
    		double vTotal = valGoto + valRoute ;
    		fieldObs.setText(Double.toString(vTotal));
    		fieldGoto= (EditText)findViewById(R.id.fieldGoto);	
    	}
    	public class dessineView extends DessineView
    	{
    		public dessineView(Context context)
    		{
    			super(context);
    			// TODO Auto-generated constructor stub
     
    		}
    		@Override
    		public void onDraw(Canvas canvas)
    		{
    			ColTrace.setColor(Color.BLACK);
    			canvas.drawRect(0, 0, 320, 380, ColFond);
    			ColFond.setColor(Color.WHITE);
    				xA = xA +1;
    				yA = yA +1;
    				xB = xB + 1;
    				yB = yB + 2;
    			canvas.drawLine(xA, yA, xB,yB ,ColTrace);
    			canvas.drawText("Goto", xB, yB, ColTrace);
     
    			//**/
    			if (xA < 100) invalidate();
     
    		}
     
    	}
    }
    Voici la classe DessineView correspondant à la déclaration xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    package org.developpez.com;
     
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.view.View;
     
    	public class DessineView extends View
    	{
    		public DessineView(Context context, AttributeSet attrs, int defStyle)
    		{
    			super(context, attrs, defStyle);
    		}
    		public DessineView(Context context, AttributeSet attrs)
    		{
    			super(context, attrs);
    		}
     
    		public DessineView(Context context)
    		{
    			super(context);
    		}
    	}
    Voici le Developpez.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/myAbsLay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
     
        <org.developpez.com.DessineView
     	android:id="@+id/mondession"
     	android:layout_width="320px" 
     	android:layout_height="380px" 
     	android:layout_y="0px"
     	android:layout_x="0px"
    	/>
     
    <Button
    	android:id="@+id/bGoto"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="GOTO"
        android:layout_x="1px" android:layout_y="380px"/>
    <EditText
    	android:text="200"
    	android:id="@+id/fieldGoto"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="60px" android:layout_y="380px">
    	</EditText>
     
    	<TextView  
        android:id="@+id/libRoute"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="  ROUTE"
        android:layout_x="110px" android:layout_y="380px"/>
    <EditText
    	android:text="180"
    	android:id="@+id/fieldRoute"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="165px" android:layout_y="380px">
    	</EditText>
     
    <TextView  
        android:id="@+id/libObs"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="  OBS"
        android:layout_x="215px" android:layout_y="380px"/>
    <EditText
    	android:text="150"
    	android:id="@+id/fieldObs"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="250px" android:layout_y="380px">
    	</EditText>
     
    </AbsoluteLayout>
    Et donc :
    -> si dans le on create, j'active setContentView(dessinHsi);, le graphisme s'affiche et fonctionne, mais pas les champs et le bouton (ce que je ne comprends pas).
    -> si je le désactive, l'écran s'affiche tel que défini dans le developpez.xml et le calcul fonctionne mais le graphisme ne s'affiche pas (ce qui est normal).

    J'ai bien sûr essayé la proposition de MrDuChnok avec dans le onCreate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AbsoluteLayout monMain = (AbsoluteLayout)findViewById(R.layout.developpez);
    //monMain.addView(dessinHsi); // <<<< provoque le plantage
    mais addvView provoque le plantage ....

    A vot bon coeur .... ! Merci d'avance

  15. #15
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    En fait dis nous en trois ligne qu'est ce que tu veux faire concretement!!!

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Bonjour jahbromo, désolé de ne pas être clair ... et merci de t'intéresser à mon cas ....

    Ce que je voudrais, c'est avoir SUR UN MEME ECRAN des champs et des boutons actifs ET la partie dessin pouvant réagir aux données des champs et à l'action sur le bouton ........

  17. #17
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Allons y petit à petit

    Parmi ce que tu voudrai faire, qu'est ce que tu ne parviens pas à faire?

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Je peux tout faire, mais pas en même temps ...!

    ->Je peux exploiter les champs et le bouton définis dans le developpez.xml.
    ->Je peux faire un tracé qui se régénère avec de nouvelles données (pseudo boucle avec le onDraw et invalidate(). Et cette boucle est placée à un endroit où les valeurs des champs sont visibles, ce qui est indispensable.

    Mais je ne peux pas avoir les deux en même temps ainsi que j'ai tenté de l'expliquer dans mon post de 9h 18.

  19. #19
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Pourquoi tu as fait une sous classe dessineView de DessineView ?
    A mon avis une partie de ton problème vient de là. Dans le XML tu dis que tu utilise le composant DessineView. Puis après dans ton code tu déclare une classe dessineView, où tu fais des trucs de spécifique. Mais à quel endroit tu dis que ton composant DessineView est en faite dessineView ?

    Bref y'a des grosses incohérences...

    voilà ce que je te conseille :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    package org.developpez.com;
     
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
     
    public class Developpez extends Activity
    {
    	private Button bGoto;
    	private EditText fieldGoto;
    	private EditText fieldRoute;
    	private EditText fieldObs;
    	float xA = 10;
    	float yA = 10;
    	float xB = 90;
    	float yB = 90;
    	Paint ColTrace = new Paint();
    	Paint ColFond = new Paint();
     
    	//private DessineView dessinCourant ;
     
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState)
    	{
    		initSaisies();
                    super.onCreate(savedInstanceState);
    		dessineView dessinHsi = new dessineView(this);		
    		setContentView(R.layout.developpez);
                    AbsoluteLayout monMain = (AbsoluteLayout)findViewById(R.layout.developpez);
                    monMain.addView(dessinHsi, new LayoutParams(320, 380, 0, 0)); // <<<< provoque le plantage
     
    		//setContentView(dessinHsi);
    	}
     
    	private void initSaisies()// méthode d'initialisation
    	{
    		// récupération des objets champs et bouton avec leur ressources du main.xml
    		fieldGoto= (EditText)findViewById(R.id.fieldGoto);
    		fieldRoute = (EditText)findViewById(R.id.fieldRoute);
    		fieldObs = (EditText)findViewById(R.id.fieldObs);
    		bGoto = (Button)findViewById(R.id.bGoto);
     
    		// mise en place du listener du bouton qui lance la méthode calculate()
    		bGoto.setOnClickListener(new Button.OnClickListener()
    		{ 
    			//@Override
    			public void onClick(View arg0)
    			{
    				//setContentView(R.layout.developpez);
    				calculate();			
    			}
    		});
    	}
     
    	private void calculate()
    	{
    		double valGoto = Double.parseDouble(fieldGoto.getText().toString());
    		double valRoute = Double.parseDouble(fieldRoute.getText().toString());
    		double vTotal = valGoto + valRoute ;
    		fieldObs.setText(Double.toString(vTotal));
    		fieldGoto= (EditText)findViewById(R.id.fieldGoto);	
    	}
    	public class dessineView extends DessineView
    	{
    		public dessineView(Context context)
    		{
    			super(context);
    			// TODO Auto-generated constructor stub
     
    		}
    		@Override
    		public void onDraw(Canvas canvas)
    		{
    			ColTrace.setColor(Color.BLACK);
    			canvas.drawRect(0, 0, 320, 380, ColFond);
    			ColFond.setColor(Color.WHITE);
    				xA = xA +1;
    				yA = yA +1;
    				xB = xB + 1;
    				yB = yB + 2;
    			canvas.drawLine(xA, yA, xB,yB ,ColTrace);
    			canvas.drawText("Goto", xB, yB, ColTrace);
     
    			//**/
    			if (xA < 100) invalidate();
     
    		}
     
    	}
    }
    et tu jartes de ton XML la déclaration de ton composant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/myAbsLay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
     
     
    <Button
    	android:id="@+id/bGoto"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="GOTO"
        android:layout_x="1px" android:layout_y="380px"/>
    <EditText
    	android:text="200"
    	android:id="@+id/fieldGoto"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="60px" android:layout_y="380px">
    	</EditText>
     
    	<TextView  
        android:id="@+id/libRoute"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="  ROUTE"
        android:layout_x="110px" android:layout_y="380px"/>
    <EditText
    	android:text="180"
    	android:id="@+id/fieldRoute"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="165px" android:layout_y="380px">
    	</EditText>
     
    <TextView  
        android:id="@+id/libObs"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="  OBS"
        android:layout_x="215px" android:layout_y="380px"/>
    <EditText
    	android:text="150"
    	android:id="@+id/fieldObs"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_x="250px" android:layout_y="380px">
    	</EditText>
     
    </AbsoluteLayout>
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Cette idée me plait bien, je vais bien sûr essayer ..

    Je subodorais l'incohérance dont tu parles, mais j'ai trouvé cette solution pour avoir le code onDraw dans l'activité principale afin qu'il puisse exploiter les valeurs des champs ..

    je teste et je rends compte !
    Merci encore ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [API HTML5] Enlever une image dessinée sur le canvas
    Par tails dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 21/01/2015, 02h19
  2. Dessin sur un canvas dans une DLL
    Par colorid dans le forum Langage
    Réponses: 1
    Dernier message: 07/03/2009, 14h09
  3. [C#] Dessiner sur un canvas et manipuler des formes avec la souris
    Par nemesisTHEone dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 18/01/2009, 15h37
  4. [Lazarus] [Débutant] Opération de trame dans un dessin sur un canvas
    Par Alcatîz dans le forum Lazarus
    Réponses: 3
    Dernier message: 30/10/2008, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo