1

I'm working on this feedback screen where I have to implement a custom rating bar. After doing some research I found this method to be just what I need. At this point I'm getting two different rating bar in an overlaying manner. I want to hide the default rating bar provided by android and I know why its happening. I'm not able to hide the rating bar. I tried getProgressDrawable().setVisible(false, false) but its of no use.

Here is the code of my overridden onDraw(Canvas c); method:

@Override
    protected synchronized void onDraw(Canvas canvas)
    {
        int stars = getNumStars();
        float rating = getRating();
        try
        {
            bitmapWidth = getWidth() / stars;
        }
        catch (Exception e)
        {
            bitmapWidth = getWidth();
        }
        float x = 0;

        for (int i = 0; i < stars; i++)
        {
            Bitmap bitmap;
            Resources res = getResources();
            Paint paint = new Paint();

            if ((int) rating > i)
            {
                bitmap = BitmapFactory.decodeResource(res, R.drawable.filled_star);
            }
            else
            {
                bitmap = BitmapFactory.decodeResource(res, R.drawable.unfilled_star);
            }
            Bitmap scaled = Bitmap.createScaledBitmap(bitmap, getHeight(), getHeight(), true);
            canvas.drawBitmap(scaled, x, 0, paint);
            paint.setColor(Color.WHITE);
            paint.setTextSize(20f);
            canvas.drawText(String.valueOf(i), x+33, 83, paint);
            canvas.save();
            x += bitmapWidth;
        }



        super.onDraw(canvas);
    }  

I just want to hide the android default rating bar overlaying on my custom rating bar.

Thanks!

Community
  • 1
  • 1
Syed Danish Ali
  • 111
  • 1
  • 1
  • 9

2 Answers2

0

layout.xml

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

styles.xml

 <style name="RatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/ratingbar</item>
        <item name="android:minHeight">10dp</item>
        <item name="android:maxHeight">50dp</item>
    </style>

ratingbar.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/icon_empty" />
        <item android:id="@+android:id/secondaryProgress"
              android:drawable="@drawable/icon_empty" />
        <item android:id="@+android:id/progress"
              android:drawable="@drawable/icon_full" />
    </layer-list>
배준모
  • 591
  • 5
  • 12
0

Just delete super.onDraw(canvas) from the onDraw method.

zoubair Omar
  • 106
  • 1
  • 5