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 :

Modifier les attribut d'un item dans une layer-list


Sujet :

Android

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut Modifier les attribut d'un item dans une layer-list
    Bonjour,

    Je débute en Android et en Java d'une manière général:

    - J'ai créé une layer-list training_services.xml du style :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- court -->
        <item
            android:bottom="30dp"
            android:drawable="@drawable/tennis_court"
            android:left="30dp"
            android:right="30dp"
            android:top="30dp" />
     
        <!--zone A-->
        <item
            android:id="@+id/zoneA"
            android:bottom="110dp"
            android:left="50dp"
            android:right="200dp"
            android:top="43.7dp">
            <shape xmlns:android="http://schemas.android.com/apk/res/android"
                android:shape="rectangle">
                <solid android:color="@android:color/holo_green_dark" />
                <stroke
                    android:width="1dp"
                    android:color="@android:color/white" />
            </shape>
        </item>
    </layer-list>
    L'item ZoneA est un rectangle sur un cours de tennis.

    Ce que je souhaiterai depuis mon activité, c'est modifier android:right="200dp" et android:left="50dp". Passer ces valeurs à 150 et 100 par exemple que le rectangle se déplace sur la droite.

    J'ai bien tenté un truc du genre mais rien n'y fait !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(getApplicationContext(), R.drawable.training_services);
            Drawable zoneA = layerDrawable.getDrawable(1);
            zoneA.setBounds(0,0,50,50);
    Je suis un peu désuni... Quelle méthode appliquée à zoneA ?????

    Si vous aviez une piste ou une solution ?
    Merci d'avance car je craque !

    A+
    coincoin22

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu est sur la bonne piste.

    Il faut récupérer une référence vers ton layer drawable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(getApplicationContext(), R.drawable.training_services)
    Puis ensuite récupérer l'élément que tu veux dans ton layerlist , pour celà il faut impérativement leur donner une id comme tu le ferais pour une view

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- court -->
        <item
            android:id="@+id/court"
            android:bottom="30dp"
            android:drawable="@drawable/tennis_court"
            android:left="30dp"
            android:right="30dp"
            android:top="30dp" />
    Et finalement le sélectionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Drawable drawable = layerDrawable.findDrawableByLayerId(R.id.court);
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Merci de m'aider...

    Ce qui m'intéresse ici c'est le second item dont j'ai donné un id ==> zoneA

    Je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     LayerDrawable layerDrawable = (LayerDrawable) getResources().getDrawable(R.drawable.training_services);
            Drawable zoneA = layerDrawable.findDrawableByLayerId(R.id.zoneA);
    Pour l'instant, je comprends... Mais pour une View, il existe SetRight, etc...
    Mais ici, pour modifier l'attribut right par exemple de zoneA, que faire ???
    J'ai bien essayé, setBounds mais rien !

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    D'après la doc , setLayerInset devrait répondre à ton besoin (jamais testé) :

    https://developer.android.com/refere...LayerInset(int, int, int, int, int)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LayerDrawable layerDrawable = (LayerDrawable) getResources().getDrawable(R.drawable.training_services);
    layerDrawable.setLayerInset(R.id.zoneA, 10, 10, 10, 10); // pour tout mettre à 10 par exemple.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    En réalité, j'ai déjà essayé tout ça... La bonne syntaxe est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LayerDrawable layerDrawable = (LayerDrawable) getResources().getDrawable(R.drawable.training_services);
    layerDrawable.setLayerInset(1, 10, 10, 10, 10); // pour tout mettre à 10 par exemple.
    car layerDrawable est un tableau et setLayerInset attend donc un index.
    Mais ça ne bouge pas d'un pixel !
    Je ne comprends pas !

    Par contre, j'ai trouvé ceci... Tu comprends le problème ?

    In the situation I am dealing with, where the first layer contains a BitmapDrawable and I'm setting insets for the subseqent layers, the offset in the call:
    setLayerInset(layer, leftOffset, topOffset, rightOffset, bottomOffset)
    are relative to the dimensions of the bitmap in the first layer, even if those dimensions are greater than the view in which the DrawableLayer is being placed (e.g. when the Bitmap is being redimensioned automatically by the view).

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Pas vraiment ,
    en revanche dans le commentaire sous ce que tu cite , il semble dire que setLayerInset n'invaliderait pas le layout , ce qui veux dire que tu peux bien faire toutes les modifs que tu veux , elle ne sont jamais prise en compte.

    Celà étant dit , ça semble étrange de vouloir modifier dynamiquement un drawable (j'ai jamais eu besoin de le faire en tout cas).

    Quel est ton objectif ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Mon besoin :

    On a le choix entre 3 niveaux (1,2,3).

    Je charge le drawable de base (training_services) qui comporte une série de layouts (ici, j'ai simplifié à 2) dont le court de tennis et cette zone A. Cette dernière doit s'agrandir selon le niveau sélectionné.

    Je voulais donc que lorsqu'on clique sur un niveau, le drawable soit modifié.

    Je vais devoir faire 3 drawables pour autant de niveaux.

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Et simplement faire une vue custom que tu dessines complètement ?
    Ca t'apporterait beaucoup plus de flexibilité.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Je ne suis pas à l'aise avec ça pour l'instant...

    Il faudrait construire dynamiquement via du code et méthodes et non du xml ?
    Mon court de tennis se construirait puis la zone. Une méthode prendrait comme paramètres les dimensions de la zone ?

    Un truc du genre ?

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Une vue personnalisée revient à dessiner ce que tu souhaites à base de forme basique. C'est la base de tous les vues standard que tu utilises.
    C'est la solution dès qu'on veux représenter quelque chose qui sort de ce que android sait faire de base.

    Tu as un exemple ici : http://davy-leggieri.developpez.com/...tion-boussole/
    Ca dessine une boussole mais le principe est applicable à n'importe quelle forme/besoin.

    une fois ta vue créer tu l'intègre dans ton xml comme une vue classique sauf que tu utilises le nom de ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <com.monapp.courttennis 
        android:layout_width="100dp"
        android:layout_height="100dp"></com.monapp.courttennis>
    Je ne sais pas quel est exactement ton besoin , mais en gros ca reviendrait à dessiner un gros rectangle d'une couleur pour ton cours , puis un autre rectangle pour ta zoneA. Ne resterais plus qu'à créer une méthode pour agir sur la taille de la zone et redessiner la vue quand nécessaire.

    Pour résumer, si tu veux faire vite et simple => tu fait 3 layer-list , ca te permet d'avancer. Si tu veux faire un peu plus propre et évolutif => une vue custom
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Merci pour toutes ces précisions ! J'ai encore beaucoup à apprendre

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2016, 10h23
  2. Réponses: 5
    Dernier message: 17/09/2009, 08h04
  3. Réponses: 1
    Dernier message: 14/08/2009, 08h50
  4. [Dojo] Modifier l'ordre d'un item dans une grid
    Par devkaty dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 29/05/2009, 00h39
  5. [VBA-E]modifier les attributs d'un commentaire dans une cellule
    Par Olivier vb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2004, 10h26

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