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

Android Discussion :

Peut-on faire un tableau de RectF ?


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Par défaut Peut-on faire un tableau de RectF ?
    Bonjour,

    La question est dans le titre ..

    Je désire dessiner dans un CANVAS une série de rectangles (qui seront en fait des boutons) et je tente l'utilisation d'un tableau de RectF
    Le code ci-dessous est le code "pour essayer", si ça marche, il y aura bien sûr une boucle.
    Eclipse ne proteste pas, mais ça plante à l'endroit indiqué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RectF[] monRec = new RectF[3];
    monRec[0].set(0,284,28, 307);
    monRec[1].set(30,284,58, 307);
    canvas.drawRoundRect(monRec[0],4,4,setTrait) ; // <<< ça plante ici
    canvas.drawRoundRect(monRec[1],4,4,setTrait) ;
    Voici ce que dit le LogCat (extrait) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    03-13 21:06:33.620: WARN/SQLiteDirectCursorDriver(222): Found SQL string that ends in ; -- SELECT _id , Code ,Type , LatE6 , LonE6 FROM WP WHERE Type <> 'UL' AND LatE6 > (47007833-333333) AND LatE6 < (47007833+333333) AND LonE6 > (-1001667-488831) AND LonE6 < (-1001667+488831);
    03-13 21:07:50.514: DEBUG/AndroidRuntime(222): Shutting down VM
    03-13 21:07:50.514: WARN/dalvikvm(222): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    03-13 21:07:50.520: ERROR/AndroidRuntime(222): Uncaught handler: thread main exiting due to uncaught exception
    03-13 21:07:50.730: ERROR/AndroidRuntime(222): java.lang.NullPointerException
    03-13 21:07:50.730: ERROR/AndroidRuntime(222):     at org.SimpleGpsNav02.riAndroid.MonTrace.onDraw(MonTrace.java:143)
    03-13 21:07:50.730: ERROR/AndroidRuntime(222):     at android.view.View.draw(View.java:6535)
    Toute bonne idée sera la bienvenue ... comme d'hab.

    Merci d'avance ...

  2. #2
    Membre chevronné

    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
    Par défaut
    On peut bel et bien faire un tableau de RectF à condition qu'il ne soit pas null;
    On peut faire plus qu'un tableau ; tu peux meme faire des List
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RectF[] monRec = new RectF[3];
    monRec[0].set(0,284,28, 307);// <<< ça  plante  ici
    monRec[1].set(30,284,58, 307);// <<< ça  plante  ici
    canvas.drawRoundRect(monRec[0],4,4,setTrait) ; // <<< ça  plante pas ici
    canvas.drawRoundRect(monRec[1],4,4,setTrait) ;
    Tu applique une methode sur null; tes rectangles Rec[0] et 1 sont tous null;

    Pour qu'il ne plante plus :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    RectF[] monRec= new RectF[5]; // Construction d'un tableau de Rectangle de 5 rectangles null; ici monRect n'est pas null mais chacun de ses elements est null;
     
     
    monRec[0]= new RectF(0,284,28, 307);
    monRec[1]= new RectF(30,284,58, 307)
     
    canvas.drawRoundRect(monRec[0],4,4,setTrait) ; // <<< ça  plante pas ici
    canvas.drawRoundRect(monRec[1],4,4,setTrait) ;
    Enfin une solution plus optimiste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
     
    RectF[] monRec= new RectF[5]
    int a=0; 
    for( int i=0;i<5;i++)
    {
    monRect[i]= new RectF(a,284,28+a, 307)
    a=a+30;// J'ai remarque que tes tableau sont ecarté de 30px
     
    canvas.drawRoundRect(monRec[i],4,4,setTrait) ;
     
     
    }

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Par défaut
    Bonjour jahbromo,

    Si je comprends bien, le fait de faire RectF[] monRec= new RectF[5];
    ... réserve la mémoire pour un tableau de RectF de 5 élément MAIS NE CRE PAS LES OBJETS CORRESPONDANTS.

    C'est en faisant monRec[0]= new RectF(0,284,28, 307); que l'on crée l'objet élément de tableau, avec lequel on peut travailler ...

    J'avais bien l'intention de générer les rectangles avec une boucle ...

    Je te remercie beaucoup et je peux passer à la difficulté suivante que j'avais sous estimée ...!
    Il s'agit bien sûr de récupérer les x,y de l'endroit ou on clique sur l'écran !

    J'ai trouvé onTouchEvent mais cela semble s'appliquer dans une classe qui extends Overlay ..... et s'utilise avec MapView.
    Sinon beaucoup d'autres choses qui remontent des valeurs de position de Views.

    Mais rien pour mon cas pourtant si simple (!!!!) ou je voudrais pouvoir connaitre les coordonnées (pixels) d'un point sur lequel je clique dans un Activity qui dessine sur un Canvas ....

    Mais chercher ne veux pas dire bien chercher !

  4. #4
    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
    Par défaut
    Tu peux utiliser
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    public boolean onTouchEvent(MotionEvent event)
    dans ta classe héritant de Activity, et ensuite te servir de event.getX(), event.getY() pour tes coordonnées

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Par défaut
    Merci Viish,

    Grace à jahbromo et toi, j'ai pu faire un grand pas en avant !
    Heureusement que je n'étais pas au bord du gouffre !

    Ci-dessous, l'implantation très simple du code qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public boolean onTouchEvent(MotionEvent event)
      {   
            //---quand on clique sur l'écran ---
            if (event.getAction() == 1)
            {              	
                  xClic = event.getX();
                  yClic = event.getY();
                  Toast.makeText(getBaseContext(),"x = " +String.valueOf(xClic) + "," + "  y = " +String.valueOf(yClic) ,Toast.LENGTH_SHORT).show();
            }                            
            return false;
        }
    La méthode est placée dans la classe qui extends l'Activity.
    Ici il y a un Toast pour l'exemple (xClic et yClic sont des float déclarés en global) mais chacun y mettra ce qu'il veut.

    Plus simple tu meurs, c'est pourtant ce qui permet de faire des choses fort intéressantes ....

    Merci encore Viish, je vais créer un post avec un titre plus clair à destination des malheureux qui cherchent ou qui chercherons cette solution.

  6. #6
    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
    Par défaut
    Mais de rien ^^

  7. #7
    Membre chevronné

    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
    Par défaut
    C'est tres risqué et voir illisible de mettre des valeurs pures dans le code. Car le chiffre 1 que tu as utilisé est incomprehensible pour les gens qui vont te suivre. Il vaut mieux utiliser les valeurs final static defini dans Android comme suivant :
    Au lieu d'utiliser directement la valeur 1, tu pourra utiliser un ceci : MotionEvent.ACTION_UP sa valeur =1 comme tu l'a fait
    Il y'a d'autre MotionEvent.ACTION_MOVE;MotionEvent.ACTION_DOWN;
    MotionEvent.ACTION_OUTSIDE

    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
     
     
     
    public boolean onTouchEvent(MotionEvent event)
      {   
            //---quand on clique sur l'écran ---
            if (event.getAction() == MotionEvent.ACTION_UP)
            {  
     
     
     
     
                  xClic = event.getX();
                  yClic = event.getY();
                  Toast.makeText(getBaseContext(),"x = " +String.valueOf(xClic) + "," + "  y = " +String.valueOf(yClic) ,Toast.LENGTH_SHORT).show();
            }                            
            return true;
    // Il doit plutot retourner true au lieu de false;
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire un tableau où on peut cliquer dedans
    Par frank30 dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/11/2010, 10h42
  2. Peut-on faire du cluster avec winXP ?
    Par wikers dans le forum Windows XP
    Réponses: 37
    Dernier message: 02/06/2009, 11h13
  3. [C#] [VS.NET] Peut on faire un accesseur sur objets?
    Par Designotik dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/01/2005, 21h56
  4. [CR] comment faire un tableau croisé
    Par yoyothebest dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 29/08/2004, 18h32
  5. Peut-on faire du son juste avec du code assembleur ?
    Par Rick1602 dans le forum Assembleur
    Réponses: 7
    Dernier message: 26/03/2004, 17h39

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