2017-02-14 2 views
1

Я создал рейтинговую шкалу, используя звездочку images.but. У меня проблема в заданном значении рейтинга в float (например, 3.2), он не работает должным образом. 3.2. Он выбирает 4 звезды. Что я могу сделать?Как показать рейтинг рейтинга в значении точки?

XML:

<RatingBar 
         android:id="@+id/rb_ratingBar" 
         style="@style/CustomRating" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:isIndicator="true" 
         android:numStars="5" 
         android:stepSize="0.5" /> 

styles.xml:

<style name="CustomRating" parent="android:style/Widget.Material.RatingBar.Small"> 

     <item name="android:progressDrawable">@drawable/custom_ratingbar</item> 
     <item name="android:minHeight">40dp</item> 
     <item name="android:maxHeight">40dp</item> 
</style> 

customratingbar.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" 
     android:drawable="@drawable/ic_star_normal" 

     ></item> 

    <item 
     android:id="@android:id/secondaryProgress" 
     android:drawable="@drawable/ic_star_selected"></item> 

    <item 
     android:id="@android:id/progress" 
     android:drawable="@drawable/ic_star_selected"></item> 

</layer-list> 

output preview image

код:

@Override 
    public void onBindViewHolder(final MyViewHolders holder, final int listPosition) { 

     TextView TVProject = holder.mTvProjectName; 
     TextView TvDescription = holder.mTvDescription; 
     RatingBar RbRating = holder.mRatingBar; 
     ImageView IvIcon = holder.IvIcon; 
     TextView TvRatings = holder.mTvRatingNumber; 
     final ProgressBar progressBar = holder.mProgressBar; 

    /* LayerDrawable stars = (LayerDrawable) RbRating.getProgressDrawable(); 
     stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); //background 
     stars.getDrawable(0).setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP); //empty 
     stars.getDrawable(1).setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);  //border*/ 



     String receivedImage = mContext.getString(R.string.WS_DIRECTORY_IMAGE) + 
       mRatingReviewModelArrayList.get(listPosition).getCompanyImage(); 
     String receivedProjectName = mRatingReviewModelArrayList.get(listPosition).getProj_Name(); 
     String receivedDescription = mRatingReviewModelArrayList.get(listPosition).getReview(); 
     Float receivedRating = mRatingReviewModelArrayList.get(listPosition).getAverage(); 

     ImageLoader.getInstance().displayImage(receivedImage, IvIcon, new ImageLoadingListener() { 
      @Override 
      public void onLoadingStarted(String imageUri, View view) { 
       progressBar.setVisibility(View.VISIBLE); 
      } 

      @Override 
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
       progressBar.setVisibility(View.GONE); 
      } 

      @Override 
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
       progressBar.setVisibility(View.GONE); 
      } 

      @Override 
      public void onLoadingCancelled(String imageUri, View view) { 
       progressBar.setVisibility(View.GONE); 
      } 
     }); 
     if (receivedDescription.equals("")) { 
      TvDescription.setVisibility(View.INVISIBLE); 
     } 
     if (receivedProjectName.equals("")) { 
      TVProject.setVisibility(View.INVISIBLE); 
     } 

     TVProject.setText(receivedProjectName); 
     TvDescription.setText(receivedDescription); 
     RbRating.setRating(receivedRating); 
     RbRating.setRating((float) 3.5); 
     TvRatings.setText(String.valueOf(receivedRating)); 
    } 

    @Override 
    public int getItemCount() { 
     return mRatingReviewModelArrayList.size(); 
    } 

    static class MyViewHolders extends RecyclerView.ViewHolder { 

     private final TextView mTvProjectName, mTvDescription, mTvRatingNumber; 
     private final RatingBar mRatingBar; 
     private final ImageView IvIcon; 
     private final ProgressBar mProgressBar; 

     MyViewHolders(View itemView) { 
      super(itemView); 
      this.mProgressBar = (ProgressBar) itemView.findViewById(R.id.progressBar_review); 
      this.mTvProjectName = (TextView) itemView.findViewById(R.id.tv_projects); 
      this.mTvDescription = (TextView) itemView.findViewById(R.id.tv_review_description); 
      this.mRatingBar = (RatingBar) itemView.findViewById(R.id.rb_ratingBar); 
      this.IvIcon = (ImageView) itemView.findViewById(R.id.img_rating_icon); 
      this.mTvRatingNumber = (TextView) itemView.findViewById(R.id.tv_rating_number); 

     } 
    } 
+0

Вы дали 'андроида: размер шага = "0,5"'. Дайте 'android: stepSize =" 0.1 "'. –

+1

Возможный дубликат [андроида установить часть звезд в баре оценки, если значение указано в десятичных разрядах] (http://stackoverflow.com/questions/18662058/android-set-part-of-the-stars-in- рейтинг-бар-if-the-value-is-decimal-place) –

+0

stepize не работает. проверено –

ответ

0

Изменение RatingBar к следующему

<RatingBar 
         android:id="@+id/rb_ratingBar" 
         style="@style/CustomRating" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:isIndicator="true" 
         android:numStars="5" 
         android:stepSize="0.1" /> 

Он работал для меня ..

Смежные вопросы