2014-12-16 4 views
10

Come fare quanto segue?come cambiare il colore RatingBar in base al numero di stelle?

se RatingBar ha 1-3 stelle - stelle rosse. se RatingBar ha 4 stelle - stelle gialle. se RatingBar ha 5 stelle - stelle verdi.

((RatingBar) layout.findViewById(R.id.ratingBar)).setProgress(Integer.parseInt(surveyBeans.get(section).get(position).getRate())); 


<RatingBar 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/ratingBar" android:stepSize="1" android:clickable="false" 
      style="?android:attr/ratingBarStyleSmall" android:layout_gravity="right" 
     android:layout_marginRight="15dp" /> 

EDIT:

@Override 
    public View getItemView(int section, int position, View convertView, ViewGroup parent) { 
     LinearLayout layout; 
     if (convertView == null) { 
      LayoutInflater inflator = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      layout = (LinearLayout) inflator.inflate(R.layout.item_survey, null); 
     } else { 
      layout = (LinearLayout) convertView; 
     } 
     ((TextView) layout.findViewById(R.id.questionSurvey)).setText(surveyBeans.get(section).get(position).getQuestion()); 
     RatingBar ratingBar = ((RatingBar) layout.findViewById(R.id.ratingBar)); 
     ratingBar.setProgress(Integer.parseInt(surveyBeans.get(section).get(position).getRate())); 
     LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
     stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(1).setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP); 
     ((TextView) layout.findViewById(R.id.commentSurvey)).setText(surveyBeans.get(section).get(position).getComment()); 

     return layout; 
    } 

codice di lavoro dopo la risposta @Murtaza Hussain:

RatingBar ratingBar = ((RatingBar) layout.findViewById(R.id.ratingBar)); 
     ratingBar.setProgress(Integer.parseInt(surveyBeans.get(section).get(position).getRate())); 
     LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
     if (ratingBar.getRating()<=3) { 
      stars.getDrawable(2).setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP); 
     } 
     if(ratingBar.getRating()==4){ 
      stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 
     } 
     if(ratingBar.getRating()==5){ 
      stars.getDrawable(2).setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP); 
     } 
+0

Dai un'occhiata a questo post: http://stackoverflow.com/questions/2446270/android-ratingbar-change-star-colors – NightFury

risposta

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

O

LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
     stars.getDrawable(2).setColorFilter(getResources().getColor(R.color.starFullySelected), PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(1).setColorFilter(getResources().getColor(R.color.starPartiallySelected), PorterDuff.Mode.SRC_ATOP); 
     stars.getDrawable(0).setColorFilter(getResources().getColor(R.color.starNotSelected), PorterDuff.Mode.SRC_ATOP); 

È possibile farlo su

ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener(){ 

     @Override 
     public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromUser) { 
      // This event is fired when rating is changed 
     }  
    }); 

dal codice

@Override 
public View getItemView(int section, int position, View convertView, ViewGroup parent) { 
    LinearLayout layout; 
    if (convertView == null) { 
     LayoutInflater inflator = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     layout = (LinearLayout) inflator.inflate(R.layout.item_survey, null); 
    } else { 
     layout = (LinearLayout) convertView; 
    } 
    ((TextView) layout.findViewById(R.id.questionSurvey)).setText(surveyBeans.get(section).get(position).getQuestion()); 

    RatingBar ratingBar = ((RatingBar) layout.findViewById(R.id.ratingBar)); 
    ratingBar.setProgress(Integer.parseInt(surveyBeans.get(section).get(position).getRate())); 

    if (ratingBar.getRating() == 2f) { 
     //change color of two stars 
    } else if (ratingBar.getRating() == 3f) { 
     //change color of three stars 
    } 

    LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
    stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 
    stars.getDrawable(1).setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP); 
    ((TextView) layout.findViewById(R.id.commentSurvey)).setText(surveyBeans.get(section).get(position).getComment()); 

    return layout; 
} 
+0

Non ho bisogno di cambiare il loro significato. È impostato una volta per tutte. Ho solo bisogno di mostrare diverse stelle. quello che hai scritto - 3 stelle se sono gialle. l'altro grigio. se 2 stelle - sono gialle - le altre sono grigie. se le 5 stelle - sono tutte gialle. Ho bisogno comunque. se 1 o 2 o 3 stelle - sono rossi e il resto - grigi. se 4 stelle - 4 stelle è gialla e una grigia.se le 5 stelle - tutte 5 - verdi –

+0

non ti hanno preso. cosa vuoi ? –

+0

se 1 o 2 o 3 stelle - sono rossi e il resto - grigi. se 4 stelle - 4 stelle è giallo e uno grigio.se le 5 stelle - tutte 5 - verde –

0
android:progressBackgroundTint="#FFF" 
    android:progressTint="@color/golden" 

mantenere quelle entrambe le linee in RatingBar, stelle attivi colore sarà dorata. working for lollipop

Problemi correlati