public static void UpdateBackground(this GradientDrawable gradientDrawable, Brush brush, int height, int width) { if (gradientDrawable == null || brush == null || brush.IsEmpty) { return; } if (brush is SolidColorBrush solidColorBrush) { Color bgColor = solidColorBrush.Color; gradientDrawable.SetColor(bgColor.IsDefault ? Color.Default.ToAndroid() : bgColor.ToAndroid()); } if (brush is LinearGradientBrush linearGradientBrush) { var p1 = linearGradientBrush.StartPoint; var x1 = (float)p1.X; var y1 = (float)p1.Y; var p2 = linearGradientBrush.EndPoint; var x2 = (float)p2.X; var y2 = (float)p2.Y; const double Rad2Deg = 180.0 / Math.PI; var angle = Math.Atan2(y2 - y1, x2 - x1) * Rad2Deg; var gradientBrushData = linearGradientBrush.GetGradientBrushData(); var colors = gradientBrushData.Item1; if (colors.Length < 2) { return; } gradientDrawable.SetGradientType(GradientType.LinearGradient); gradientDrawable.SetColors(colors); gradientDrawable.SetGradientOrientation(angle); } if (brush is RadialGradientBrush radialGradientBrush) { var center = radialGradientBrush.Center; float centerX = (float)center.X; float centerY = (float)center.Y; float radius = (float)radialGradientBrush.Radius; var gradientBrushData = radialGradientBrush.GetGradientBrushData(); var colors = gradientBrushData.Item1; if (colors.Length < 2) { return; } gradientDrawable.SetGradientType(GradientType.RadialGradient); gradientDrawable.SetGradientCenter(centerX, centerY); gradientDrawable.SetGradientRadius(Math.Max(height, width) * radius); gradientDrawable.SetColors(colors); } }
protected override void OnElementChanged(ElementChangedEventArgs <Button> e) { base.OnElementChanged(e); if (e.OldElement == null) { var button = Control; // See ButtonRendererWithNavFix.cs CustomClickHandler(button); // Applies a "blue" gradient to our Android navigation buttons var gradientDrawable = new GradientDrawable(); gradientDrawable.SetOrientation(GradientDrawable.Orientation.TlBr); gradientDrawable.SetColors(new int[] { Color.Argb(255, 20, 143, 194), Color.Argb(255, 0, 44, 119) }); gradientDrawable.SetGradientType(GradientType.RadialGradient); gradientDrawable.SetGradientRadius(300); gradientDrawable.SetGradientCenter(0.5f, 0); button.SetBackgroundDrawable(gradientDrawable); // Sets a small drop shadow to the buttons' text button.SetShadowLayer(1, 1, 1, Color.Black); } }
protected override void OnElementChanged(ElementChangedEventArgs <Button> e) { base.OnElementChanged(e); if (e.OldElement == null) { var button = Control; // Applies a "gray" gradient to our Android popup buttons var gradientDrawable = new GradientDrawable(); gradientDrawable.SetOrientation(GradientDrawable.Orientation.TlBr); gradientDrawable.SetColors(new int[] { Color.Argb(255, 167, 169, 172), Color.Argb(255, 76, 76, 76) }); gradientDrawable.SetGradientType(GradientType.RadialGradient); gradientDrawable.SetGradientRadius(300); gradientDrawable.SetGradientCenter(0.5f, 0); button.SetBackgroundDrawable(gradientDrawable); // Sets a small drop shadow to the buttons' text button.SetShadowLayer(1, 1, 1, Color.Black); } }