How to make a progress bar with rounded corners in Xamarin Forms using Custom Renderer

后端 未结 1 1637
滥情空心
滥情空心 2020-12-17 05:13

I want to display progress bar with rounded corners in Xamarin forms. I was able to do it in iOS using a custom renderer:



        
相关标签:
1条回答
  • 2020-12-17 05:41

    How to make a progress bar with rounded corners in Xamarin forms

    You could add a Drawable on your android ProgressBar to implement this feature.

    Set the style for your ProgressBar , Drawable\bar_color.xml :

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <!--set progressbar backgound style-->
        <item
            android:id="@android:id/background"
            android:drawable="@drawable/progress_bar_background" />
    
        <!--set progressbar schedule style-->
        <item android:id="@android:id/progress">
            <scale
                android:drawable="@drawable/shape_progressbar_progress"
                android:scaleWidth="100%" />
        </item>
    
    </layer-list>
    

    Drawable\progress_bar_background.xml :

    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <corners android:radius="20dp" />
        <solid android:color="#FFCBC2C2" />
    </shape>
    

    Drawable\shape_progressbar_progress.xml :

    <shape xmlns:android="http://schemas.android.com/apk/res/android">
       <corners android:radius="20dp" />
       <solid android:color="#3F8CC4" />
       <stroke
           android:width="0dp"
           android:color="#FFFFFF"></stroke>
    </shape>
    

    Using it in your CustomProgressBarRenderer :

    public class CustomProgressBarRenderer : ProgressBarRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e)
        {
            base.OnElementChanged(e);
    
            if(Control != null)
            {
                var progressBar = Control as Android.Widget.ProgressBar;
                //below is now deprecated
                //var draw = Resources.GetDrawable(Resource.Drawable.bar_color);
                var draw = Context.GetDrawable(Resource.Drawable.bar_color);
                progressBar.ProgressDrawable = draw;
            }
        }
    }
    

    Effect :

    0 讨论(0)
提交回复
热议问题