diff options
Diffstat (limited to 'Xamarin.Forms.Platform.Android/Renderers/ActivityIndicatorRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.Android/Renderers/ActivityIndicatorRenderer.cs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Android/Renderers/ActivityIndicatorRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/ActivityIndicatorRenderer.cs new file mode 100644 index 00000000..e2314c61 --- /dev/null +++ b/Xamarin.Forms.Platform.Android/Renderers/ActivityIndicatorRenderer.cs @@ -0,0 +1,59 @@ +using System.ComponentModel; +using Android.Graphics; +using Android.OS; +using Android.Views; +using AProgressBar = Android.Widget.ProgressBar; + +namespace Xamarin.Forms.Platform.Android +{ + public class ActivityIndicatorRenderer : ViewRenderer<ActivityIndicator, AProgressBar> + { + public ActivityIndicatorRenderer() + { + AutoPackage = false; + } + + protected override void OnElementChanged(ElementChangedEventArgs<ActivityIndicator> e) + { + base.OnElementChanged(e); + + AProgressBar progressBar = Control; + if (progressBar == null) + { + progressBar = new AProgressBar(Context) { Indeterminate = true }; + SetNativeControl(progressBar); + } + + UpdateColor(); + UpdateVisibility(); + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if (e.PropertyName == ActivityIndicator.IsRunningProperty.PropertyName) + UpdateVisibility(); + else if (e.PropertyName == ActivityIndicator.ColorProperty.PropertyName) + UpdateColor(); + } + + void UpdateColor() + { + if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop) + return; + + Color color = Element.Color; + + if (!color.IsDefault) + Control.IndeterminateDrawable.SetColorFilter(color.ToAndroid(), PorterDuff.Mode.SrcIn); + else + Control.IndeterminateDrawable.ClearColorFilter(); + } + + void UpdateVisibility() + { + Control.Visibility = Element.IsRunning ? ViewStates.Visible : ViewStates.Invisible; + } + } +}
\ No newline at end of file |