Techniquement, la SeekBar, barre de progression, utilise un curseur (nommé thumb) qui est un Drawable.
Problème 1 : afficher complètement le thumb.
Lorsque la progression de la SeekBar est à 0, le curseur était affiché à moitié. Réciproquement une seule moitié était affichée lorsque le curseur est au maximum.La solution se trouve dans la documentation de l'API :
sb.setThumbOffset(0);Explication par le source Android AbsSeekBar.java:
108 // Assuming the thumb drawable is symmetric, set the thumb offset 109 // such that the thumb will hang halfway off either edge of the 110 // progress bar. 111 mThumbOffset = thumb.getIntrinsicWidth() / 2;
Problème 2 : setThumb fait disparaître le curseur.
Quelques secondes après l'affichage du Drawable comme curseur, ce dernier disparaissait.La solution a été donnée par Romain GUY, il faut refaire une étape de setThumb() (cf paragraphe précédent)
Drawable retourDrawable; retourDrawable = getResources().getDrawable( R.drawable.voituremgps1234); retourDrawable.setBounds(new Rect(0, 0, retourDrawable.getIntrinsicWidth(), retourDrawable.getIntrinsicHeight())); sb.setThumb(retourDrawable);
Problème 3 : setThumb remet le curseur à 0
Ce problème m'a donné pas mal de fil à retordre. La responsabilité de setThumb dans le repositionnement du curseur n'est pas immédiate. C'est en procédant au pas à pas que le lien m'est apparu. Concrètement, le curseur est positionné à zéro mais ne réponds pas aux ordres de repositionnement.C'est probablement dans l'API mais je n'ai pas trouvé.
Mon conseil est de mettre le curseur à une valeur nulle ou négative avant de le remettre à la bonne position :
sb.setThumb(retourDrawable); // Le drawable sb.setProgress(-1); // progress négatif sb.setProgress(positionThumb); // progress à la bonne place.
Aucun commentaire:
Enregistrer un commentaire