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 :

Ajouter et effacer un objet dynamiquement


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut Ajouter et effacer un objet dynamiquement
    Bonjour,

    pour mon application j'ai créer cet objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public MediaImage() {
            x = 0;
            y = 0;
            w = 0;
            h = 0;
            color = 0;
            text = "";
            size = 0;
            tv = null;
        }
    Grâce à des commandes http et à cet objet il permet de placer à l'écran de son appareil, un textView (aux coordonnées (x,y), et définit les paramètres du texte.
    Pour que cela fonctionne, j'ai du prédéfinir à la création de l'activité une dizaine de ces objets...si l'utilisateur ne se sert pas de tous, ça fait des pertes de mémoire...

    J'aimerai savoir si au lieu de devoir créer une dizaine de c'est objet au démarrage, il est possible de les créer quand l'utilisateur en a besoin ?
    Sachant que l'utilisateur doit pouvoir le supprimer de l'écran quand il veut et qu' il peut y avoir plusieurs de ces objets à l'écran et donc effacer seulement l'objet désiré (et non tous)

    Cordialement.

    EDIT.
    Mon fond d'application est un canvas, du coup pour effacer que je "colorie" mon fond...aux endroits voulu (grâce aux coordonnées, longueur et largeur du textview). Du coup, en créant les objets dynamiquement au besoin, il faudrait pouvoir les effacer "correctement" et non cacher.

  2. #2
    Membre actif Avatar de fahdijbeli
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 281
    Points : 240
    Points
    240
    Par défaut
    Bonjour,
    bon moi je suis purement java mais ce que je connais est l'android il accepte le code java donc dans ce cas là tu peux utiliser la classe Class http://docs.oracle.com/javase/7/docs...ang/Class.html et dans cette classse vous avez la méthode forName(String) grâce à elle tu peux instancier des objet d'une classe à la demande.
    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
    public static Class<?> forName(String className)
                            throws ClassNotFoundException
     
    Returns the Class object associated with the class or interface with the given string name. Invoking this method is equivalent to:
     
        Class.forName(className, true, currentLoader) 
     
    where currentLoader denotes the defining class loader of the current class.
     
    For example, the following code fragment returns the runtime Class descriptor for the class named java.lang.Thread:
     
        Class t = Class.forName("java.lang.Thread") 
     
    A call to forName("X") causes the class named X to be initialized.
     
    Parameters:
        className - the fully qualified name of the desired class.
    Returns:
        the Class object for the class with the specified name.
    Throws:
        LinkageError - if the linkage fails
        ExceptionInInitializerError - if the initialization provoked by this method fails
        ClassNotFoundException - if the class cannot be located
    Merci.

  3. #3
    Membre éclairé
    Avatar de LeBzul
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 381
    Points : 832
    Points
    832
    Par défaut
    Salut,
    Une façon de faire, je pense, serait de stocker tes objets dans un tableau, un SparseArray par exemple.
    Cela te permettra de les parcourir facilement; l'ajout / suppression dans un tableau est basique.
    A chaque ajoute / suppression d'un objets tu demande a t'as view de se redessiner, en appelant par exemple la méthode invalidate() de ta View principale.
    Dans la méthode onDraw de ta view principale, tu parcours ton tableau d'objets "MediaImage", qui est normalement toujours à jour pour les dessiner tous.
    Pour la suppression, ca dépend comment tu veux que ca fonctionne;
    Par exemple, si l'utilisateur a juste besoin de cliquer dessus pour l'enlever, alors tu parcours ton tableau d'objets "MediaImage" en vérifiant si le x/y du click correspond avec ceux de ton objets, si c'est le cas tu l’enlèves.
    Je suis pas sur d'être très clair ! :p
    "Quand la lune n'est pas là, la nuit mène une existence obscure"

  4. #4
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    C'est un peu comme dans tous les langages, tu crées un container (Ex: LinearLayout) et tu lui ajoutes, retires des Childs.
    Tu peux les rechercher en y associant un Tag et en consultant le container (le parent).

    La difficulté est plus de savoir comment les disposer (taille, position, couleurs...).
    Si la réponse vous a aidé, pensez à cliquer sur +1

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Bonsoir,
    merci pour ces réponses.

    Mon "container" est un canvas. Le textView est convertit en Bitmap -> canvas.drawBitmap( textview.getDrawingCache(), x, y, paint);
    Pour supprimer mon texte, je récupère les coordonnées x,y ainsi que longueur et largeur, puis dessine un rectangle dans lequel j'applique un PorterDuff : Mode.clear

    Mon problème était que j'étais obligé de déclarer tout un tas de "MediaImage" pour conserver les mesures de tous les textes que je veux écrire. Le coup du tableau du tableau j'y avais pas penser...pourtant c'est plutôt simple. Merci XD
    Le truc c'est que je ne peux pas rafraichir non sans cesse l'affichage car à l'écran il n'y a pas que les texte, on peut y dessiner des formes, afficher des images, mélanger texte et forme...le tout de façon "libre" en entrant les coordonnées, largeur, longueur...

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Perso je n'ai pas travaillé avec le canvas mais j'ai déjà créé des objets dynamiquement avec des TableLayout, LinearLayout...
    Recherché les Tag des objets.
    Je suis même passé d'une action dans un onglet, à l'onglet suivant pour cliquer sur un bouton et changer la vue


    Pour le canvas ce doit être pareil puisque il y a toute une arborescence (hiérarchique).
    Il y a même un tool android externe fourni avec le SDK qui te montre cette hiérarchie.

    Je te dirais de rechercher l'objet "taggué" et tu vas de child en child
    Tous les objets graphiques doivent avoir une méthode de refresh (ou draw) et pour les supprimer.
    Si la réponse vous a aidé, pensez à cliquer sur +1

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. [Débutant] Ajouter des évènements sur des objets dynamiques
    Par fdthierry dans le forum VB.NET
    Réponses: 6
    Dernier message: 30/09/2011, 17h30
  3. Réponses: 3
    Dernier message: 05/03/2010, 09h48
  4. Ajouter objet dynamiquement via un bouton
    Par maxjaco dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 23/06/2006, 16h39
  5. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 13h56

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