Android: SeekBar personnalisé drawable
J'ai SeekBar personnalisé drawable. Les progrès de l'élément n'est pas rendu à gauche exactement, mais il est déplacé vers la droite. Comment puis-je éviter cela?
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@android:id/summary"
android:background="@null"
android:progressDrawable="@drawable/seekbar"
android:thumb="@drawable/seekbar_thumb"/>
seekbar.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@android:id/background"
android:drawable="@drawable/seekbar_background"/>
<item android:id="@android:id/progress">
<clip android:drawable="@drawable/seekbar_progress" />
</item>
</layer-list>
seekbar_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
<stroke android:width="2dp" android:color="@color/colorNeutral" />
</shape>
seekbar_progress.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
<stroke
android:width="4dp"
android:color="@color/colorAccentDark" />
</shape>
EDIT:
Comme mentionné dans les commentaires si il y aura les deux largeurs même problème disparaît. Mais j'ai besoin de le faire avec deux largeurs différentes à travers drawable est-il possible? Peut-être avec des formes différentes et pas seulement les lignes?
- essayez d'ajouter android:gravity="gauche|en haut" pour progresser
- oui j'ai essayé mais sans effet
- que dire de la largeur de progrès? essayez de la modifier à 2dp, juste pour savoir si c'est la cause du problème.
- à l'intérieur de l'avc pour seekbar_progress.
- ok ce travail, mais que faire si j'ai besoin de 4dp progrès?
- Pourquoi ne pas utiliser le thème de l'attribut de votre seekbar à la place?
- parce que je veux changer dynamiquement la couleur de seekbars
- Ce que vous pouvez faire, si votre choix de couleur ne sont pas illimitées, c'est de créer un ensemble de seekbar des fichiers xml avec le thème droit et puis gonfler par programmation si nécessaire.
InformationsquelleAutor Michal | 2016-01-21
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas expliquer pourquoi est-ce un problème lors de la création de traits, je pense qu'il a quelque chose à voir avec les traits de la largeur, mais je n'ai pas encore trouver la source pour vérifier.
La fixation de la Superposition
À supprimer le problème à la main, vous pouvez simplement mettre une
inset
sur votre gauche. Une valeur de1dp
ou2dp
à la fois le travail et la seekbar sera bien dessiné.Remarque: à l'Aide de cette approche, il devrait y avoir aucun risque que le fond est trop courte et ne sont pas visibles avec de faibles valeurs de progrès, depuis le pouce serait de superposition et de le cacher dans tous les cas.
Observation
Lorsque vous créez une ligne à l'aide de la forme drawable il laisse à gauche et à droite de rembourrage (à partir de la vue dans laquelle ce drawable est utilisée).égale à la moitié de l'épaisseur du trait.
Solution de contournement
Vous avez besoin d'envelopper votre progress_background avec un encart drawable et puis il que le progrès de l'arrière-plan.
Le médaillon peut être semblable au suivant-
inset_seekbar_background.xml
et votre dernière seekbar.xml sera comme-
Suppléants
1.Vous pouvez utiliser un 9 chemin de l'image pour la ligne, comme c'est fait par défaut dans le matériel de conception-
2.Vous pouvez définir le thème de votre point de vue avec des couleurs différentes dans android style-
Ici, j'ai utilisé tous les t-il des options pour Seekbars-
Et c'est ici la sortie-
Comme il semble l'émission en cours, je pense qu'ils devraient être tous deux de la même largeur
mais vous en faire des progrès largeur = 4
android:width="4dp"
et seekbar largeur = 2
android:width="2dp"
tout simplement correspondre à 2 ou 4 ne pas utiliser des valeurs différentes
Essayez d'en utiliser un .9.png drawable de largeur 4dp (converti en px) .
Garder 1 dp en haut et en bas transparent.
Et ajouter de la couleur à la centre 2 dp de votre choix pour l'arrière-plan.
De cette façon à la fois de fond et de progrès sera de même largeur, mais le fond sera look plus mince que la barre de progression.
Si votre choix de couleur a une limite et est prédéfini. Vous pouvez essayer d'ajouter des fichiers XML avec Seekbars à l'aide de différents thèmes.
Quelque chose comme ceci:
themed_seekbar_one.xml
themed_seekbar_two.xml
Vous pouvez ensuite gonfler n'vues par programmation comme ceci:
Essayez comme ceci en utilisant
android:layout_marginLeft="-3dp"
ou
-2dp