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 :

Gradient de couleur sur ProgressBar


Sujet :

Android

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Gradient de couleur sur ProgressBar
    Hello,

    J'aurais aimé savoir s'il était possible sur Android, de manière plus ou moins native, de changer dynamiquement la couleur d'une progressBar à partir d'un gradient de couleur et en fonction du pourcentage de progression ?

    Par exemple, quand la valeur de progression de la barre est entre 0 et 50%, on a une multitude de teintes entre le Rouge et le Orange, et quand la progression de la barre est entre 50% et 100%, on a une multitude de teintes entre le Orange et le Vert.

    Est-ce géré par Android ou bien va-t-il falloir que je code cette fonctionnalité from scratch ?


    Merci !

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Alors je ne veux pas dire de bétise, mais dans Android, une progress bar n'est ni plus ni moins qu'un "drawable".
    Ce drawable peut donc parfaitement être un gradient dans le genre...

    Par contre, un double gradient aucune idée.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre habitué Avatar de rsuinux
    Homme Profil pro
    Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    Bonjour;
    Effectivement, tu peux modifier ton progressBar en fonction d'un pourcentage.
    Je le fait dans une application actuellement pour demander à l'utilisateur, la valeur de sa douleur: de bleu (0) à rouge (10)
    Si tu patiente ce soir, je te mets le code (je suis au boulot, je n'ai pas ma machine perso)

    Edit:
    pour l'utilisation d'une progressBar, voila comment je m'y suis pris. Dans mon layout, j'ai placé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
                    <SeekBar
                        android:id="@+id/Douleur"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:max="10"
                        android:progress="0"
                        android:progressDrawable="@drawable/progress"
                        android:thumbOffset="10dp"
                        android:thumb="@drawable/curseur"
                        android:paddingEnd="6dip"
                        android:paddingStart="6dip" />
    Mon @drawable/progress:
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:id="@android:id/background">
                <shape android:shape="rectangle" >
                    <corners android:radius="5dp" />
                    <gradient
                        android:angle="0"
                        android:startColor="@color/min_douleur"
                        android:centerX="0.5"
                        android:endColor="@color/max_douleur"/>
                </shape>
            </item>
            <item>
                <clip>
                    <shape android:shape="rectangle" >
                        <corners android:radius="5dp" />
                        <gradient
     
                            android:startColor="@color/min_douleur"
                            android:centerY="0.5"
                            android:endColor="@color/max_douleur"/>
                    </shape>
                </clip>
            </item>
            <item android:state_pressed="true">
                <shape android:shape="rectangle" >
                    <corners android:radius="5dp"/>
                    <gradient
     
                        android:startColor="@color/min_douleur"
                        android:centerY="0.5"
                        android:endColor="@color/max_douleur"/>
                </shape>
            </item>
    </selector>
    les couleurs min et max sont simplement dans le fichier des couleurs, et y font réréfences.
    Le drawable/curseur est un petit png de ma confection qu'android-studio a mis à la bonne taille..

    Pour le code, à présent:
    Pour info, et oui, selon la douleur j'ai une indication en chiffre par des radio-bouton qui s'active en même temps que la position de la seekbarr
    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
            final SeekBar seekBar;
            seekBar = (SeekBar) findViewById(R.id.Douleur);
            // on met le premier bouton à "true"
    ((RadioButton) rg.getChildAt(0)).setChecked(true);
    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
    public void onCheckedChanged(RadioGroup group, int checkedId) {
                    RadioButton rEnCours=(RadioButton)findViewById(checkedId);
    seekBar.setProgress(checkedId);
                }
            });
    
            // gestion de la seekbarr de la douleur
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    // à partir de la on change l'état des radio bouton quand la seekbar change
    ((RadioButton) rg.getChildAt(progress)).setChecked(true);
                }
    
            });
    .../...suite du code
    Voila, si cela peut t'aider.
    Cordialement.
    Si tu ne sais pas: demande, si tu sais, partage.

  4. #4
    Membre habitué Avatar de rsuinux
    Homme Profil pro
    Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    rectification:
    je n'avais pas tout compris.
    pour faire moitié/moitié, je placerai ç dans le layout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    <gradient
                        android:angle="0"
                        android:startColor="@color/min_douleur"
                        android:centerX="0.5"
                        android:endColor="@color/max_douleur"/>
    et je couperai en trois et non en deux comme j'ai fait (android:centerX="0,5")

    Cherche de ce côté.
    Si tu ne sais pas: demande, si tu sais, partage.

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Hello,

    Merci de ta réponse !

    Malheureusement, ce n'est pas exactement ce que je souhaite, et je pense que je me suis mal exprimé.

    En fait, la couleur de la progressBar doit être une couleur unie.
    C'est juste que la teinte change en fonction de la valeur du pourcentage.

    Prenons ce tableau comme base :
    Nom : 40980f9c7e.png
Affichages : 534
Taille : 35,2 Ko

    Je souhaiterais que tous les 2% de la progressBar, on change la teinte de la progressBar avec la couleur correspondante sur le tableau.

    Mais j'imagine que c'est un fonctionnement qu'il faut que j'établisse moi-même, du coup.

  6. #6
    Membre habitué Avatar de rsuinux
    Homme Profil pro
    Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Infirmier Formateur pour logiciel de Dossiers de Soins Informatisés
    Secteur : Santé

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    Effectivement, je pense qu'il va falloir réécrire la méthode .
    Cela dépasse un peu mes compétences.
    Mais le sujet m'intéresse.
    Si tu ne sais pas: demande, si tu sais, partage.

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Tu peux spécifier une couleur à la progressBar avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    progressBar.getProgressDrawable().setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN); // ici en rouge
    voir une teinte si API >= 21 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
    Donc tu devrais être en mesure de faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    progressBar.setProgress(value); // value entre 0 et 100
    int color = getGradient(value);
    progressBar.getProgressDrawable().setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_IN);
    Avec la génération de couleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int getGradient(int value){
        double val = value / 100;
        return Color.HSVToColor(new float[]{(float)val*120f,1f,1f});
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [JButton] getContenPane() et couleur sur les boutons
    Par harris_macken dans le forum Composants
    Réponses: 4
    Dernier message: 05/06/2005, 06h31
  2. Réponses: 8
    Dernier message: 17/05/2005, 18h08
  3. [OPENGL/C++] Couleur sur un DWORD ?
    Par Bob.Killer dans le forum OpenGL
    Réponses: 7
    Dernier message: 15/04/2005, 14h20
  4. Aide pour changer de couleur sur les primitifs GLUT
    Par romainhoarau2764 dans le forum GLUT
    Réponses: 3
    Dernier message: 19/03/2005, 13h30
  5. Couleur de ProgressBar
    Par benj63 dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/07/2002, 17h33

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