Android - How to put round corner on the running progress in a progress bar using custom xml drawable as background

3.4k Views Asked by At

I'm using a custom drawable for my progress bar:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="15dp" />
            <solid android:color="@color/light_grey" />
        </shape>
    </item>

    <item android:id="@android:id/progress" >
        <clip>
            <shape>
                <corners android:radius="15dp" />
                <solid android:color="@color/indigo" />                
            </shape>
        </clip>
    </item>
</layer-list>

and it looks like:

enter image description here

Now, the background appears with a round corner, but the progress (inside) is straight, and I want to make it round too, like this:

enter image description here

I googled but didn't find any solution.

Any ideas on how can I achieve this round corner on progress?

Thanks!

3

There are 3 best solutions below

0
iDeveloper On

you can see example of view here

you can modify the color and size of the thumb and seekbar to do what you want.

This solution was the only way i could do this. Hope this help

this is my seekbar :

         <SeekBar
            android:id="@+id/simpleProgressBar"
            android:layout_width="fill_parent"
            android:layout_height="12dp"
            android:max="100"
            android:progress="0"
            android:background="@null"
            android:shape="oval"
            android:splitTrack="false"
            android:progressDrawable="@drawable/progress_background"
            android:secondaryProgress="0"
            android:thumbOffset="10dp"
            android:thumb="@drawable/oval_seekbar_thumb" />

this is (progress_background.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">
        <shape android:shape="rectangle">
            <corners android:radius="5dp" />

            <gradient
                android:angle="270"
                android:endColor="@color/grey_line"
                android:startColor="@color/grey_line" />
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
           <shape android:shape="oval">
               <corners android:radius="5dp" />
               <gradient
                   android:angle="270"
                   android:endColor="@color/blue"
                   android:startColor="@color/blue" />
           </shape>
       </clip>
   </item>
   <item android:id="@android:id/progress">
       <clip>
           <shape android:shape="rectangle">
               <corners android:radius="90dp" />

               <gradient
                   android:angle="90"
                   android:endColor="@color/colorPrimaryDark"
                   android:startColor="@color/colorPrimary" />
            </shape>
       </clip>
   </item>

and this is the thumb (oval_seekbar_thumb.xml) :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <solid android:color="#ffffff" />
            <stroke android:color="@color/colorPrimaryDark" android:width="3dp"/>
            <size android:height="12dp" android:width="12dp"/>
        </shape>
    </item>
</selector>

The height of the thumb should be same as the height of the seekbar to look properly.

0
Yurii On

I know maybe it is obsolete question,but, just remove <clip> tag.

0
andinrajesh On

Replace the <clip> tag with <scale android:scaleWidth="100%">. This should give the curved edges to secondary progress