简体   繁体   English

如何以点值显示评级栏评级?

[英]How to show ratingbar rating in point value?

I created Rating bar using star images.but i have problem in set rating value into float(like 3.2) it not work properly.give 3.2 it select 4 stars.what can i do?我使用星级图像创建了评级栏。但是我在将评级值设置为浮点数(如 3.2)时遇到问题,它无法正常工作。给 3.2 它选择 4 颗星。我该怎么办?

xml : 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 :样式.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 : 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输出预览图像

code:代码:

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

        }
    }

Change the RatingBar to the following将 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" />

It has worked for me..它对我有用..

Replace your xml code with this.用这个替换你的 xml 代码。

              <RatingBar
                android:id="@+id/ratingBar"
                style="?android:attr/ratingBarStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:stepSize="0.01"
                android:numStars="5" />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM