2016-02-13 11 views
26

Sono un principiante di Android e voglio rendere il mio voto personalizzatoBar.Come posso impostare il colore del tratto della barra di valutazione di Android? (Non il colore delle stelle ma il BORDO)

Disclaimer: non è un duplicato. perché tutti i post che ho letto mi chiedono come cambiare i colori della stella e come rimuovere il tratto. NON è quello che voglio. Voglio avere il tratto e poter cambiare il colore del bordo.

Con un tratto trasparente e giallo mentre vuoto e sfondo e tratto gialli per metà e pieno.

NON voglio usare pngs. Ho già il mio ma sono troppo piccoli. Non voglio chiedere al designer di crearne di nuovi se riesco a creare le stelle usando solo attributi e drawable XML.

<RatingBar 
      android:id="@+id/thread_rating" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:isIndicator="true" 
      android:numStars="5" 
      android:progressBackgroundTint="@color/gray" 
      android:progressTint="@color/gold" 
      android:rating="2.5" 
      android:secondaryProgressTint="@color/gray" 
      android:stepSize="0.5" 
      style="?android:attr/ratingBarStyleSmall" 
      /> 

Lavoro con un altro tecnico. Ha anche scritto codice in un file java

private void setRatingBarStart(RatingBar rating_bar) { 
LayerDrawable stars = (LayerDrawable) rating_bar.getProgressDrawable(); 
stars.getDrawable(2) 
    .setColorFilter(getResources().getColor(R.color.gold), 
     PorterDuff.Mode.SRC_ATOP); // for filled stars 
stars.getDrawable(1) 
    .setColorFilter(getResources().getColor(R.color.light_gray), 
     PorterDuff.Mode.SRC_ATOP); // for half filled stars 
stars.getDrawable(0) 
    .setColorFilter(getResources().getColor(R.color.light_gray), 
     PorterDuff.Mode.SRC_ATOP); // for empty stars 

[Così ora ha uno sfondo grigio, giallo per la piena, e NO ictus ora.

enter image description here

e voglio che abbia sfondo trasparente, ictus giallo e giallo per il pieno. Assomiglia a questo enter image description here

So già come impostare lo sfondo trasparente e renderlo giallo. Non so come impostare il colore del tratto. Molte grazie!!!!

+1

Possibile duplicato di [Android RatingBar modifica i colori delle stelle] (http://stackoverflow.com/questions/2446270/android-ratingbar-change-star-colors) –

+0

Guarda questo thread .. http://stackoverflow.com/questions/5800657/how-to-create-custom-ratings-bar-in-android Basta impostare tre diversi png per gli stras (vuoto, pieno e mezzo pieno) con tratto e colore interno e il lavoro è fatto –

+0

@AlessioTrecani Ciao Grazie per il tuo commento. NON voglio pngs. Li ho già ma sono troppo piccoli. Cerco di non chiedere al designer di crearne di nuovi se posso impostare le stelle con gli attributi XML –

risposta

16

Mettere tutto il colore selezionabile su Giallo (nel tuo caso getResources().getColor(R.color.gold) per tutti) per impostare i tratti e lo sfondo. (per lo sfondo, il progresso secondario e progresso)

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar); 
     LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
     stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(0).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(1).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 

rimuovere progressBackgroundTint, progressTint, secondaryProgressTint attributi dal RatingBar alcun bisogno di esso.

<RatingBar 
     android:id="@+id/ratingBar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:numStars="5" 
     android:rating="2.5"/> 

e il risultato è ::

image1

Spero che questo vi aiuterà (colore rosa è il colore di sfondo solo)

dopo impostare drawable 1 e 0 al rosso :

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar); 
     LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
     stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(0).setColorFilter(Color.Red, PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(1).setColorFilter(Color.Red, PorterDuff.Mode.SRC_ATOP); 

image2

+0

La domanda è: come posso cambiare solo il colore del tratto? Ad esempio, prendi le stelle nel tuo esempio e aggiungi loro un bordo rosso. – vitorsdcs

+0

KDeogharkar, la tua risposta è semplice, chiara e risolve correttamente il problema. Probabilmente ti assegnerò la taglia. Comunque sarebbe davvero grandioso se tu potessi aiutarmi con la mia domanda precedente - perché questo è l'obiettivo che sto cercando di raggiungere e il motivo per cui ho iniziato questa taglia. – vitorsdcs

+0

significa che vuoi cambiare i colori del bordo, ad esempio i tratti gialli in rosso? è questo che vuoi? @vitorsdcs – KDeogharkar

3

penso in realtà ho trovato quello che ti serve. Dovrai creare una custom RatingBar come spiegato in questo answer MA dovrai utilizzare i drawable vettoriali e non quelli standard.

È possibile scaricare le 3 drawable (pieno, mezzo vuoto) e su questo sito:

https://materialdesignicons.com/

o facendo un clic destro sulla cartella res: -> Nuovo -> Vector patrimoniale su Android Studio.

Ecco l'XML 3 drawable nel caso in cui non li trovate:

stelle completa:

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:height="24dp" 
android:width="24dp" 
android:viewportWidth="24" 
android:viewportHeight="24"> 
<path android:fillColor="#000" android:pathData="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z" /> 

mezza stella:

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:height="24dp" 
android:width="24dp" 
android:viewportWidth="24" 
android:viewportHeight="24"> 
<path android:fillColor="#000" android:pathData="M12,15.89V6.59L13.71,10.63L18.09,11L14.77,13.88L15.76,18.16M22,9.74L14.81,9.13L12,2.5L9.19,9.13L2,9.74L7.45,14.47L5.82,21.5L12,17.77L18.18,21.5L16.54,14.47L22,9.74Z" /> 

Emp ty stelle:

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
android:height="24dp" 
android:width="24dp" 
android:viewportWidth="24" 
android:viewportHeight="24"> 
<path android:fillColor="#000" android:pathData="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z" /> 

di cambiare le loro dimensioni, solo aggiornare gli attributi height e width.

Per cambiare colore, è sufficiente aggiornare l'attributo fillColor e impostare il colore giallo.

+0

SVG non funziona per la barra di valutazione. Qualche idea del perché? – Johan

Problemi correlati