Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : août 2003
    Messages : 2 938
    Points : 6 489
    Points
    6 489

    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 :
    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 :
    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 :
    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 :
    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 Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : août 2003
    Messages : 2 938
    Points : 6 489
    Points
    6 489

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •