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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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