Android Open Source - appboy-android-sdk Star Rating View

From Project

Back to project page appboy-android-sdk.


The source code is released under:

Copyright (c) 2014 Appboy, Inc. All rights reserved. * Use of source code or binaries contained within Appboy's Android SDK is permitted only to enable use of the Appboy platform by customers of Appb...

If you think the Android project appboy-android-sdk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.appboy.ui.widget;
//  w  w w  . j  ava2 s. c  om
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.appboy.Constants;
import com.appboy.ui.R;

import java.util.ArrayList;
import java.util.List;

public class StarRatingView extends LinearLayout {
  private static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, StarRatingView.class.getName());

  private static final int MAX_NUMBER_OF_STARS = 5;
  private List<ImageView> mStarRating;
  private float mRating = 0.0f;

  public StarRatingView(Context context, AttributeSet attrs) {
    super(context, attrs);

    // Initialize the star views and layout parameters so they can be changed to match the rating of this specific card later.
    mStarRating = new ArrayList<ImageView>(MAX_NUMBER_OF_STARS);
    for (int i = 0; i < MAX_NUMBER_OF_STARS; i++) {
      ImageView star = new ImageView(context);
      ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
      addView(star, layoutParams);


  public float getRating() {
    return mRating;

  public boolean setRating(float rating) {
    if (rating < 0 || rating > MAX_NUMBER_OF_STARS) {
      Log.e(TAG, String.format("Unable to set rating to %f. Rating must be between 0 and %d", rating, MAX_NUMBER_OF_STARS));
      return false;

    mRating = rating;
    int ratingRoundedDown = (int) Math.floor(mRating);
    int ratingRoundedUp = (int) Math.ceil(mRating);
    for (int starIndex = 0; starIndex < ratingRoundedDown; starIndex++) {
      ImageView star = mStarRating.get(starIndex);
    for (int starIndex = ratingRoundedUp; starIndex < mStarRating.size(); starIndex++) {
      ImageView star = mStarRating.get(starIndex);

    // Processing the remainder. A remainder between [0.25, 0.75) will be displayed as a half star.
    // Otherwise, it be rounded up/down to the nearest whole star.
    float remainder = rating - ratingRoundedDown;
    if (remainder > 0.0f) {
      ImageView star = mStarRating.get(ratingRoundedDown);
      if (remainder < 0.25f) {
      } else if (remainder < 0.75f) {
      } else {
    return true;

  List<ImageView> getImageViewList() {
    return mStarRating;

Java Source Code List