void SetDrawable2(Color StartColor, Color EndColor) { MyButtonRenderer myButtonRenderer = (MyButtonRenderer)Element; if (myButtonRenderer.IsGradient) { StartColor = System.Drawing.Color.FromArgb(70, StartColor); EndColor = System.Drawing.Color.FromArgb(70, EndColor); var gradient = new CAGradientLayer(); gradient.Colors = new CGColor[] { StartColor.ToCGColor(), EndColor.ToCGColor() }; gradient.StartPoint = new CGPoint(0, 0.5); gradient.EndPoint = new CGPoint(1, 0.5); Control.Layer.InsertSublayer(gradient, 0); var newBounds = Element.Bounds.ToRectangleF(); foreach (var layer in Control?.Layer.Sublayers.Where(layer => layer is CAGradientLayer)) { layer.Frame = new CGRect(0, 0, newBounds.Width, newBounds.Height); } } else { Color staticColor = System.Drawing.Color.FromArgb(70, myButtonRenderer.StaticColor); Control.BackgroundColor = staticColor.ToUIColor(); } }
void SetDrawable(MyButtonRenderer myButtonRenderer) { if (myButtonRenderer.IsGradient) { Color StartColor = ColorInterpolator.InterpolateBetween(myButtonRenderer.EndColor, myButtonRenderer.StartColor, myButtonRenderer.NumOfGradientStart); Color EndColor = ColorInterpolator.InterpolateBetween(myButtonRenderer.StartColor, myButtonRenderer.EndColor, myButtonRenderer.NumOfGradientEnd); var gradient = new CAGradientLayer(); gradient.Colors = new CGColor[] { StartColor.ToCGColor(), EndColor.ToCGColor() }; gradient.StartPoint = new CGPoint(0, 0.5); gradient.EndPoint = new CGPoint(1, 0.5); Control.Layer.InsertSublayer(gradient, 0); } else { Control.BackgroundColor = myButtonRenderer.StaticColor.ToUIColor(); } }
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (e.PropertyName.Equals(MyButtonRenderer.StaticColorProperty.PropertyName)) { MyButtonRenderer myButtonRenderer = (MyButtonRenderer)Element; GradientDrawable gradientDrawable = (GradientDrawable)Control.Background; gradientDrawable.SetColor(myButtonRenderer.StaticColor.ToAndroid()); } if (e.PropertyName.Equals(MyButtonRenderer.IsEnabledProperty.PropertyName)) { MyButtonRenderer myButtonRenderer = (MyButtonRenderer)Element; GradientDrawable gradientDrawable = (GradientDrawable)Control.Background; if (!myButtonRenderer.IsEnabled) { if (myButtonRenderer.IsGradient) { Color StartColor = System.Drawing.Color.FromArgb(70, myButtonRenderer.StartColor); Color EndColor = System.Drawing.Color.FromArgb(70, myButtonRenderer.EndColor); gradientDrawable.SetColors(new int[] { StartColor.ToAndroid(), EndColor.ToAndroid() }); } else { Color staticColor = System.Drawing.Color.FromArgb(70, myButtonRenderer.StaticColor); gradientDrawable.SetColor(staticColor.ToAndroid()); } } else { if (myButtonRenderer.IsGradient) { gradientDrawable.SetColors(new int[] { myButtonRenderer.StartColor.ToAndroid(), myButtonRenderer.EndColor.ToAndroid() }); } else { gradientDrawable.SetColor(myButtonRenderer.StaticColor.ToAndroid()); } } } }
protected override void OnElementChanged(ElementChangedEventArgs <Button> e) { base.OnElementChanged(e); if (e.OldElement == null && e.NewElement != null) { MyButtonRenderer myButtonRenderer = (MyButtonRenderer)Element; if (!myButtonRenderer.IsEnabled) { SetDrawable2(myButtonRenderer.StartColor, myButtonRenderer.EndColor); } else { SetDrawable(myButtonRenderer); } TypeBorder = myButtonRenderer.TypeBorder; } }
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (e.PropertyName.Equals(MyButtonRenderer.StaticColorProperty.PropertyName)) { MyButtonRenderer myButtonRenderer = (MyButtonRenderer)Element; Control.BackgroundColor = myButtonRenderer.StaticColor.ToUIColor(); } if (e.PropertyName.Equals(MyButtonRenderer.IsEnabledProperty.PropertyName)) { MyButtonRenderer myButtonRenderer = (MyButtonRenderer)Element; if (!myButtonRenderer.IsEnabled) { //SetDrawable2(myButtonRenderer.StartColor, myButtonRenderer.EndColor); //Control.TintColor = Color.White.ToUIColor(); SetDrawable(myButtonRenderer.StartColor, myButtonRenderer.EndColor); var newBounds = Element.Bounds.ToRectangleF(); foreach (var layer in Control?.Layer.Sublayers.Where(layer => layer is CAGradientLayer)) { layer.Frame = new CGRect(0, 0, newBounds.Width, newBounds.Height); } } else { SetDrawable(myButtonRenderer.StartColor, myButtonRenderer.EndColor); /*if (myButtonRenderer.IsGradient) * { * * } * else * { * SetDrawable(myButtonRenderer.StartColor, myButtonRenderer.EndColor); * var newBounds = Element.Bounds.ToRectangleF(); * foreach (var layer in Control?.Layer.Sublayers.Where(layer => layer is CAGradientLayer)) * layer.Frame = new CGRect(0, 0, newBounds.Width, newBounds.Height); * }*/ } } }
protected override void OnElementChanged(ElementChangedEventArgs <Button> e) { base.OnElementChanged(e); if ((Control != null) && (e.OldElement == null)) { MyButtonRenderer myButtonRenderer = (MyButtonRenderer)Element; GradientDrawable gradientDrawable = new GradientDrawable(); if (myButtonRenderer.IsGradient) { Color StartColor = ColorInterpolator.InterpolateBetween(myButtonRenderer.EndColor, myButtonRenderer.StartColor, myButtonRenderer.NumOfGradientStart); Color EndColor = ColorInterpolator.InterpolateBetween(myButtonRenderer.StartColor, myButtonRenderer.EndColor, myButtonRenderer.NumOfGradientEnd); if (!myButtonRenderer.IsEnabled) { StartColor = System.Drawing.Color.FromArgb(70, StartColor); EndColor = System.Drawing.Color.FromArgb(70, EndColor); } gradientDrawable = new GradientDrawable( GradientDrawable.Orientation.LeftRight, new int[] { StartColor.ToAndroid(), EndColor.ToAndroid() } ); } else { Color staticColor = myButtonRenderer.StaticColor; if (!myButtonRenderer.IsEnabled) { staticColor = System.Drawing.Color.FromArgb(70, myButtonRenderer.StaticColor); } gradientDrawable.SetColor(staticColor.ToAndroid()); } switch (myButtonRenderer.TypeBorder) { case TypeBorder.All: gradientDrawable.SetCornerRadii(new float[] { 80, 80, 80, 80, 80, 80, 80, 80 }); break; case TypeBorder.Left: gradientDrawable.SetCornerRadii(new float[] { 80, 80, 0, 0, 0, 0, 80, 80 }); break; case TypeBorder.Right: gradientDrawable.SetCornerRadii(new float[] { 0, 0, 80, 80, 80, 80, 0, 0 }); break; case TypeBorder.Down: gradientDrawable.SetCornerRadii(new float[] { 0, 0, 0, 0, 80, 80, 80, 80 }); break; case TypeBorder.Up: gradientDrawable.SetCornerRadii(new float[] { 80, 80, 80, 80, 0, 0, 0, 0 }); break; } Control.StateListAnimator = new StateListAnimator(); Control.SetBackground(gradientDrawable); } }