2016-02-13 5 views
26

Ich bin ein Android-Anfänger und ich möchte meine benutzerdefinierte ratingBar machen.Wie kann ich die Farbe des Anschlags des androiden Bewertungsstabs einstellen? (Nicht die Farbe der Sterne, sondern die Grenze)

Haftungsausschluss: Es ist kein Duplikat. weil alle Beiträge, die ich gelesen habe, danach gefragt werden, wie man die Farben des Sterns ändert und wie man den Strich entfernt. Das ist NICHT was ich will. Ich möchte den Strich haben und die Farbe der Grenze ändern können.

Mit einem transparenten und gelben Strich während leer, und gelben Hintergrund und Strich für die Hälfte und gefüllt.

Ich möchte nicht PNGs verwenden. Ich habe mein eigenes schon, aber sie sind zu klein. Ich möchte den Designer nicht bitten, neue zu erstellen, wenn ich die Sterne nur mit XML-Attributen und -Zeichnungen erstellen kann.

<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" 
      /> 

Ich arbeite daran mit einem anderen Ingenieur. Er schrieb auch Code in einer Java-Datei

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 

[it So hat jetzt einen grauen Hintergrund, gelb für gefüllte und keinen Schlaganfall jetzt.

enter image description here

Und ich will es transparenten Hintergrund hat, gelb Schlaganfall und gelb für gefüllt. Sieht so aus enter image description here

Ich weiß bereits, wie man den Hintergrund transparent und gelb macht. Ich weiß nicht, wie ich die Strichfarbe einstellen soll. Danke vielmals!!!!

+1

Mögliche Duplikate von [Android RatingBar ändern Sternfarben] (http://Stackoverflow.com/questions/2446270/android-ratingbar-change-star-colors) –

+0

Schauen Sie sich diesen Thread .. http://StackOverflow.com/Fragen/5800657/how-to-create-custom-Bewertungen-bar-in-android Legen Sie einfach drei verschiedene Png für Stras (leer, gefüllt und halb gefüllt) mit Strich und innere Farbe und der Job ist fertig –

+0

@AlessioTrecani Hallo Vielen Dank für Ihren Kommentar. Ich will keine PNGs. Ich habe sie schon, aber sie sind zu klein. Ich versuche, den Designer nicht zu bitten, neue zu machen, wenn ich die Sterne mit den XML-Attributen setzen kann –

Antwort

16

Setzen Sie alle Zeichenfarbe auf Gelb (in Ihrem Fall getResources().getColor(R.color.gold) für alle) für eingestellte Striche und Hintergrund. (für den Hintergrund, sekundären Fortschritt und Fortschritte)

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); 

entfernen progressBackgroundTint, progressTint, secondaryProgressTint Attribute aus RatingBar keine Notwendigkeit davon.

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

und Ergebnis ist ::

image1

Hope this helfen (rosa Farbe ist nur Hintergrundfarbe)

nach eingestellt ziehbar 1 und 0 bis rot :

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

Die Frage ist: Wie ändere ich nur die Strichfarbe? Nehmen wir zum Beispiel die Sterne in Ihrem Beispiel und fügen Sie ihnen einen roten Rahmen hinzu. – vitorsdcs

+0

KDeogharkar, Ihre Antwort ist einfach, klar und richtig behandelt das Problem. Ich werde dir wahrscheinlich das Kopfgeld geben. Aber das wäre wirklich toll, wenn Sie mir bei meiner vorherigen Frage helfen könnten - denn das ist das Ziel, das ich erreichen möchte, und der Grund, warum ich dieses Bounty begonnen habe. – vitorsdcs

+0

bedeutet, dass Sie die Farben der Umrandung zum Beispiel gelbe Striche in rot ändern möchten? ist das was du willst? @vitorsdcs – KDeogharkar

3

Ich glaube, ich fand eigentlich das, was Sie brauchen. Sie müssen eine benutzerdefinierte RatingBar wie in diesem answer erläutert erstellen, aber Sie müssen Vektor-Drawables und nicht Standard-Zeichen verwenden.

Sie können den 3 Drawables (Voll-, Halb- und leer) auf dieser Website:

https://materialdesignicons.com/

oder durch einen Rechtsklick auf Ihrem res Ordner tun: -> Neu -> Vector Asset auf Android Studio.

Hier sind die 3 Drawables XML, falls Sie sie nicht finden:

voller Stern:

<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" /> 

Halb Sterne:

<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 Stern:

<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" /> 

ihre Größe zu ändern, aktualisieren Sie einfach die Attribute height und width.

Um ihre Farbe zu ändern, aktualisieren Sie einfach das Attribut fillColor und stellen Sie Ihre gelbe Farbe ein.

+0

SVG funktioniert nicht für die Bewertungsleiste. Irgendeine Idee warum? – Johan