p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 499
    Points : 8 396
    Points
    8 396

    Par défaut Progressbar setProgressDrawable et ListView

    Suite à mon post précédent je rencontre un nouveau souçis.

    J'ai donc une listView avec entre autre une progressBar pour chaque item.
    Ma progress bar à un theme spécifique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <style name="progressBarHDD" parent="@android:Widget.ProgressBar.Horizontal">
            <item name="android:progressDrawable">@drawable/bg_hdd_progressbar</item>
            <item name="android:minHeight">10dp</item>
            <item name="android:maxHeight">10dp</item>
    </style>
    Avec un progressDrawable associé très classique :
    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
    37
    38
    39
    40
    41
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      	<item android:id="@android:id/background">
        	<shape>
            	<corners android:radius="5dip" />
            	<stroke android:width="2dip" android:color="#ffa6a7a7" />
            	<gradient
    					android:startColor="#ff353636"
    					android:centerColor="#ff636363"
    					android:centerY="0.75"
    					android:endColor="#ffa6a7a7"
    					android:angle="270" />
        	</shape>
    	</item>
    	<item android:id="@android:id/secondaryProgress">
    	    <clip>
    	        <shape>
    	            <corners android:radius="5dip" />
    	            <gradient
    					android:startColor="#ff353636"
    					android:centerColor="#ff636363"
    					android:centerY="0.75"
    					android:endColor="#ffa6a7a7"
    					android:angle="270" />
    	        </shape>
    	    </clip>
    	</item>
    	<item android:id="@android:id/progress">
    		<clip>
    		   <shape>
    		    <stroke android:width="1dip" android:color="#ff4a7b00" />
    			<corners android:radius="5dip" />
    			<gradient
    				android:startColor="#ffc6f849"
    				android:centerColor="#ffc2f648"
    				android:centerY="0.75"
    				android:endColor="#ff91d63f"
    				android:angle="270" />
    		   </shape>
    		</clip>
    	</item>
    </layer-list>
    J'ai également un autre drawable me permettant de changer la couleur de la progressBar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/progress">
        <shape>
            <stroke android:width="1dip" android:color="#ff7b0000" /> 
            <corners android:radius="5dip" />
            <gradient 
                android:startColor="#fff10000"
                android:centerColor="#ffd10000"
                android:centerY="0.75"
                android:endColor="#ffad0000"
                android:angle="270" />
        </shape>
    </item>
    Pour peupler ma listView j'utilise un Adapter. Dans le getView de cet adapter deux solutions.
    Soit je modifie uniquement la valeur du progress de ma progressbar soit je change également la couleur de la progressBar :

    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
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        if(convertView == null) {
            convertView = inflater.inflate(R.layout.lv_etat_hdd, null);
        }
     
        DisqueDur hdd = this.items.get(position);
        if(hdd != null)
        {
            ProgressBar spaceGraph  = (ProgressBar) convertView.findViewById(R.id.space_graph);
            //ProgressBar
            int progress = 0;
            if(hdd.getSpaceTotal() != 0)
                progress = (int) (100 - ((espaceDispoDbl*100) / espaceTotal));
     
            spaceGraph.setProgress(progress);
            if(hdd.getSpace() < 1024 && hdd.getType() != DCDROM)
                spaceGraph.setProgressDrawable(this.ctx.getResources().getDrawable(R.drawable.bg_hdd_progressbar_error));
     
        }
     
        return convertView;
    }
    Tout marche très bien jusqu'au moment ou je dois scroller ma listView.
    Si les progressBar n'ont pas été modifiée , pas de problème. En revanche si la couleur de la progressBar a été modifiée via setProgressDrawable dès que l'item de la listview sort de l'écran , la progressBar disparait (alors que les autres éléments sont toujours là. Celà ne se produit que avec l'utilisation de setProgressDrawable().

    Une idée ?

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 499
    Points : 8 396
    Points
    8 396

    Par défaut

    Après moult tests et recherches , il semblerait que setProgressDrawable() soit plus ou moins buggué sous android 2.x (et peut être avant).
    Sous Android 3.x et 4.0 aucun problème tout marche très bien. Donc pour le moment je me suis résigner à limiter mon changement de couleur dans la listview au version d'android supérieur à 2

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/10/2011, 14h57
  2. Insertion progressbar dans listview
    Par hellspawn_ludo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/05/2007, 13h16
  3. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49
  4. ListView
    Par SnickeursMan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/08/2002, 10h42
  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