View difference between Paste ID: 3LBuhw0V and Fcq7ewmC
SHOW: | | - or go back to the newest paste.
1
In PCL:
2
3
using Xamarin.Forms;
4
5
namespace Project.UI.Controls
6
{
7-
    public class RoundedFrame:Frame
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(RoundedFrame), default(double));
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
}