Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- In PCL:
- using Xamarin.Forms;
- namespace Project.UI.Controls
- {
- public class ExtendedFrame : Frame
- {
- public RoundedFrame()
- {
- HasShadow = false;
- IsClippedToBounds = false;
- }
- public static readonly BindableProperty CornerRadiusProperty = BindableProperty.Create(nameof(CornerRadius), typeof(double), typeof(ExtendedFrame), default(double));
- public double CornerRadius
- {
- get { return (double) GetValue(CornerRadiusProperty); }
- set { SetValue(CornerRadiusProperty, value);}
- }
- }
- }
- in Android:
- using Android.Graphics.Drawables;
- using Intouch.Controls;
- using Intouch.Droid.Renderers;
- using Xamarin.Forms;
- using Xamarin.Forms.Platform.Android;
- using Color = Android.Graphics.Color;
- [assembly: ExportRenderer(typeof(ExtendedFrame), typeof(ExtendedFrameRenderer))]
- namespace Project.Droid.Renderers
- {
- public class ExtendedFrameRenderer : FrameRenderer
- {
- protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
- {
- base.OnElementChanged(e);
- if (e.OldElement != null) return;
- var frame = (ExtendedFrame)e.NewElement;
- var vg = ViewGroup;
- #pragma warning disable 618
- vg.SetBackgroundDrawable(GenerateShape(frame.BackgroundColor.ToAndroid(), frame.OutlineColor.ToAndroid(),1, frame.CornerRadius, frame.Width, frame.Height));
- #pragma warning restore 618
- }
- public static Drawable GenerateShape(Color color, Color colorStroke, int stokeSize, float strokeRadius, double width, double height)
- {
- var density = Forms.Context.Resources.DisplayMetrics.Density;
- stokeSize = (int) (stokeSize * density);
- strokeRadius = strokeRadius * density;
- var drawable = new GradientDrawable(GradientDrawable.Orientation.BottomTop, new int[] { color, color });
- drawable.SetStroke(stokeSize, colorStroke);
- drawable.SetSize((int)(width*density), (int)(height*density));
- drawable.SetCornerRadius(strokeRadius);
- return drawable;
- }
- }
- }
- in iOS:
- using System.ComponentModel;
- using Intouch.Controls;
- using Intouch.iOS.Renderers;
- using Xamarin.Forms;
- using Xamarin.Forms.Platform.iOS;
- [assembly: ExportRenderer(typeof(ExtendedFrame), typeof(ExtendedFrameRenderer))]
- namespace Project.iOS.Renderers
- {
- class ExtendedFrameRenderer : FrameRenderer
- {
- private ExtendedFrame extendedFrame;
- protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
- {
- base.OnElementChanged(e);
- extendedFrame = (e.NewElement as ExtendedFrame);
- SetCornerRadius();
- }
- protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
- {
- base.OnElementPropertyChanged(sender, e);
- if (e.PropertyName == "CornerRadius")
- {
- SetCornerRadius();
- }
- }
- private void SetCornerRadius()
- {
- if (this.NativeView != null && extendedFrame != null)
- {
- this.NativeView.Layer.CornerRadius = extendedFrame.CornerRadius;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement