Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. In PCL:
  2.  
  3. using Xamarin.Forms;
  4.  
  5. namespace Project.UI.Controls
  6. {
  7.     public class ExtendedFrame : Frame
  8.     {
  9.         public RoundedFrame()
  10.         {
  11.             HasShadow = false;
  12.             IsClippedToBounds = false;
  13.         }
  14.  
  15.         public static readonly BindableProperty CornerRadiusProperty = BindableProperty.Create(nameof(CornerRadius), typeof(double), typeof(ExtendedFrame), default(double));
  16.  
  17.         public double CornerRadius
  18.         {
  19.             get { return (double) GetValue(CornerRadiusProperty); }
  20.             set { SetValue(CornerRadiusProperty, value);}
  21.         }
  22.     }
  23. }
  24.  
  25. in Android:
  26.  
  27. using Android.Graphics.Drawables;
  28. using Intouch.Controls;
  29. using Intouch.Droid.Renderers;
  30. using Xamarin.Forms;
  31. using Xamarin.Forms.Platform.Android;
  32. using Color = Android.Graphics.Color;
  33.  
  34. [assembly: ExportRenderer(typeof(ExtendedFrame), typeof(ExtendedFrameRenderer))]
  35. namespace Project.Droid.Renderers
  36. {
  37.     public class ExtendedFrameRenderer : FrameRenderer
  38.     {
  39.         protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
  40.         {
  41.  
  42.             base.OnElementChanged(e);
  43.             if (e.OldElement != null) return;
  44.             var frame = (ExtendedFrame)e.NewElement;                
  45.             var vg = ViewGroup;
  46. #pragma warning disable 618
  47.             vg.SetBackgroundDrawable(GenerateShape(frame.BackgroundColor.ToAndroid(), frame.OutlineColor.ToAndroid(),1, frame.CornerRadius, frame.Width, frame.Height));
  48. #pragma warning restore 618
  49.         }
  50.  
  51.         public static Drawable GenerateShape(Color color,  Color colorStroke, int stokeSize, float strokeRadius, double width, double height)
  52.         {
  53.  
  54.             var density = Forms.Context.Resources.DisplayMetrics.Density;
  55.             stokeSize = (int) (stokeSize * density);
  56.             strokeRadius = strokeRadius * density;
  57.  
  58.             var drawable = new GradientDrawable(GradientDrawable.Orientation.BottomTop, new int[] { color, color });
  59.             drawable.SetStroke(stokeSize, colorStroke);
  60.             drawable.SetSize((int)(width*density), (int)(height*density));
  61.             drawable.SetCornerRadius(strokeRadius);
  62.  
  63.             return drawable;
  64.         }
  65.     }
  66. }
  67.  
  68.  
  69.  
  70. in iOS:
  71.  
  72. using System.ComponentModel;
  73. using Intouch.Controls;
  74. using Intouch.iOS.Renderers;
  75. using Xamarin.Forms;
  76. using Xamarin.Forms.Platform.iOS;
  77.  
  78. [assembly: ExportRenderer(typeof(ExtendedFrame), typeof(ExtendedFrameRenderer))]
  79. namespace Project.iOS.Renderers
  80. {
  81.     class ExtendedFrameRenderer : FrameRenderer
  82.     {
  83.         private ExtendedFrame extendedFrame;
  84.  
  85.         protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
  86.         {
  87.             base.OnElementChanged(e);
  88.            
  89.                 extendedFrame = (e.NewElement as ExtendedFrame);
  90.                 SetCornerRadius();
  91.            
  92.         }
  93.  
  94.         protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
  95.         {
  96.             base.OnElementPropertyChanged(sender, e);
  97.  
  98.             if (e.PropertyName == "CornerRadius")
  99.             {
  100.                 SetCornerRadius();
  101.             }
  102.         }
  103.  
  104.         private void SetCornerRadius()
  105.         {
  106.             if (this.NativeView != null && extendedFrame != null)
  107.             {
  108.                 this.NativeView.Layer.CornerRadius = extendedFrame.CornerRadius;
  109.             }
  110.         }
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement