Barre de progression arrondie des deux côtés dans Android
Je suis en train de créer une barre de progression personnalisée sous android. J'ai utilisé le fichier xml suivant (progress_bar_horizontal.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">
<shape>
<corners android:radius="8dip" />
<stroke android:width="2dip" android:color="#FFFF"/>
<solid android:color="#FFFF"/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="8dip" />
<stroke android:width="2dip" android:color="#FFFF"/>
<solid android:color="#FF00"/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="8dip" />
<stroke android:width="2dip" android:color="#FFFF"/>
<solid android:color="#FF00"/>
</shape>
</clip>
</item>
</layer-list>
Tout fonctionne très bien à part le fait que je voudrais avoir de l'avancement dans ma barre de progression arrondi sur les deux côtés. Le code mentionné ci-dessus fait une barre de progression pour être arrondi sur le côté gauche et il suffit de couper (pas d'arrondi) sur le côté droit. C'est à cause du clip tag probablement. Pourriez-vous svp m'aider à ce sujet? Que dois-je changer pour avoir de l'avancement dans ma barre de progression arrondi sur les deux côtés?
La mise en page complète se passe ci-dessous:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/gradient_progress"
android:padding="10dip"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/progress_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF000000"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"
android:text="Uploading"
/>
<TextView
android:id="@+id/progress_percent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF000000"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"
android:text="55%"
android:paddingLeft="10dip"
/>
</LinearLayout>
<ProgressBar
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/progress_bar_horizontal"
android:maxHeight="12dip"
android:minHeight="12dip"
android:max="100"
/>
</LinearLayout>
</LinearLayout>
Voici le résultat de mes efforts: texte du lien
J'aimerais que la barre rouge pour avoir des bords arrondis sur le côté droit.
Merci beaucoup pour vos commentaires.
source d'informationauteur youri
Vous devez vous connecter pour publier un commentaire.
Voici une mise à jour de répondre à la fois:
Le code source Android utilise le Patch 9 fichiers pour obtenir l'effet:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/drawable/progress_horizontal_holo_dark.xml/
Donc, commencer la mise en page xml:
Vous pouvez déplacer un lot de ce style xml mais c'est à côté de la question. Ce qui nous préoccupe vraiment, c'est
android:progressDrawable="@drawable/custom_progress_bar_horizontal"
- ce qui va nous permettre de préciser notre propre barres de progression:Ou vous n'avez pas à utiliser un Patch 9 pour votre arrière-plan pour l'exemple ici est un simple fond blanc avec un 1dp frontière:
Android Asset Studio est un outil génial pour vous aider à générer Patch 9 fichiers:
http://android-ui-utils.googlecode.com/hg/asset-studio/dist/nine-patches.html
Exemple primaire xdpi png avec rembourrage en avant de l'outil:
Exemple secondaire xdpi png avec rembourrage en avant de l'outil:
Et le résultat final:
Il suffit de changer l'étiquette
<clip>
à<scale>
comme ceci:Autant que je sache, ce n'est pas possible. Car en interne
ClipDrawable
(c'est à dire clip tag) coupe la forme donnée/drawable à l'aide decanvas.clipRect()
. Btw, vous pouvez copier leClipDrawable
source de ici et clip un chemin particulier, basé sur le niveau d'avancement.Afin de résoudre le problème de la fin de graphiques chevauchement d'eux-mêmes lorsque la progression est très faible, j'ai écrit une extension de la classe ProgressBar qui ajoute un fixe décalage du début à la barre de progression, alors que le contraire fonctionnement normal.
Juste appelle " setMaxWithPercentOffset()' ou 'setMaxWithOffset ()" plutôt que " setMax()' en passant la valeur que vous voulez ajouter comme un décalage du début à la barre de progression.
Si quelqu'un a résolu ce problème sans nécessiter le décalage de début de laissez-moi savoir!
Final arrondi des deux côtés de la barre de progression sans 9-patch est:
android:progressDrawable="@drawable/progress_horizontal_green"