public override void Draw(CoreGraphics.CGRect rect) { base.Draw(rect); this.LayoutIfNeeded(); RoundedCornerView rcv = (RoundedCornerView)Element; //rcv.HasShadow = false; rcv.Padding = new Thickness(0, 0, 0, 0); //this.BackgroundColor = rcv.FillColor.ToUIColor(); this.ClipsToBounds = true; this.Layer.BackgroundColor = rcv.FillColor.ToCGColor(); this.Layer.MasksToBounds = true; this.Layer.CornerRadius = (nfloat)rcv.RoundedCornerRadius; if (rcv.MakeCircle) { this.Layer.CornerRadius = (int)(Math.Min(Element.Width, Element.Height) / 2); } this.Layer.BorderWidth = 0; if (rcv.BorderWidth > 0 && rcv.BorderColor.A > 0.0) { this.Layer.BorderWidth = rcv.BorderWidth; /* * this.Layer.BorderColor = newUIColor( * (nfloat)rcv.BorderColor.R, * (nfloat)rcv.BorderColor.G, * (nfloat)rcv.BorderColor.B, * (nfloat)rcv.BorderColor.A).CGColor; */ } }
private static void DrawBorder(Canvas canvas, RoundedCornerView control, Path path) { if (control.BorderColor == Xamarin.Forms.Color.Transparent || control.BorderWidth <= 0) { return; } var paint = new Paint(); paint.AntiAlias = true; paint.StrokeWidth = control.BorderWidth; paint.SetStyle(Paint.Style.Stroke); paint.Color = control.BorderColor.ToAndroid(); canvas.DrawPath(path, paint); paint.Dispose(); }
/// <summary> /// Drawables the state changed. /// </summary> protected override void DrawableStateChanged() { base.DrawableStateChanged(); RoundedCornerView rcv = ((RoundedCornerView)Element); var shape = new GradientDrawable(); if (rcv.MakeCircle) { shape.SetCornerRadius(Math.Min(Width, Height) / 2); } else { shape.SetCornerRadius((float)rcv.RoundedCornerRadius); } shape.SetColor(rcv.FillColor.ToAndroid()); shape.SetStroke((int)rcv.BorderWidth, (((RoundedCornerView)Element)).BorderColor.ToAndroid()); this.SetBackground(shape); }
private static float[] GetRadii(RoundedCornerView control) { var radius = (float)(control.CornerRadius); radius *= 2; var topLeft = control.TopLeft ? radius : 0; var topRight = control.TopRight ? radius : 0; var bottomLeft = control.BottomLeft ? radius : 0; var bottomRight = control.BottomRight ? radius : 0; if (!control.BottomLeft && !control.BottomRight && !control.TopLeft && !control.TopRight) { topLeft = topRight = bottomLeft = bottomRight = radius; } var radii = new[] { topLeft, topLeft, topRight, topRight, bottomRight, bottomRight, bottomLeft, bottomLeft }; return(radii); }
private static float[] GetRadii(RoundedCornerView control) { var radius = (float)(control.CornerRadius); radius *= 2; var topLeft = control.RoundedCorners.ToLower().Contains("topleft") ? radius : 0; var topRight = control.RoundedCorners.ToLower().Contains("topright") ? radius : 0; var bottomLeft = control.RoundedCorners.ToLower().Contains("bottomleft") ? radius : 0; var bottomRight = control.RoundedCorners.ToLower().Contains("bottomright") ? radius : 0; if (control.RoundedCorners.ToLower().Contains("all")) { topLeft = topRight = bottomLeft = bottomRight = radius; } var radii = new[] { topLeft, topLeft, topRight, topRight, bottomRight, bottomRight, bottomLeft, bottomLeft }; return(radii); }
public static Drawable GenerateBackgroundWithShadow(RoundedCornerView control, Android.Views.View child, Android.Graphics.Color backgroundColor, Android.Graphics.Color shadowColor, int elevation, GravityFlags shadowGravity) { var radii = GetRadii(control); int DY; switch (shadowGravity) { case GravityFlags.Center: DY = 0; break; case GravityFlags.Top: DY = -1 * elevation / 3; break; default: case GravityFlags.Bottom: DY = elevation / 3; break; } var shapeDrawable = new ShapeDrawable(); shapeDrawable.Paint.Color = backgroundColor; shapeDrawable.Paint.SetShadowLayer(elevation, 0, DY, shadowColor); child.SetLayerType(LayerType.Software, shapeDrawable.Paint); shapeDrawable.Shape = new RoundRectShape(radii, null, null); var drawable = new LayerDrawable(new Drawable[] { shapeDrawable }); drawable.SetLayerInset(0, elevation, elevation, elevation, elevation); child.Background = drawable; return(drawable); }
/// <summary> /// , /// </summary> /// <param name="e"></param> protected override void OnElementChanged(ElementChangedEventArgs <Xamarin.Forms.View> e) { base.OnElementChanged(e); if (e.OldElement == null && e.NewElement != null) { RoundedCornerView rcv = ((RoundedCornerView)e.NewElement); var shape = new GradientDrawable(); if (rcv.MakeCircle) { shape.SetCornerRadius(Math.Min(Width, Height) / 2); } else { shape.SetCornerRadius((float)rcv.RoundedCornerRadius); } shape.SetColor(rcv.FillColor.ToAndroid()); shape.SetStroke((int)rcv.BorderWidth, (((RoundedCornerView)Element)).BorderColor.ToAndroid()); this.SetBackground(shape); } }
protected override bool DrawChild(Canvas canvas, global::Android.Views.View child, long drawingTime) { if (Element == null) { return(false); } RoundedCornerView rcv = (RoundedCornerView)Element; this.SetClipChildren(true); rcv.Padding = new Thickness(0, 0, 0, 0); //rcv.HasShadow = false; int radius = (int)(rcv.RoundedCornerRadius); // Check if make circle is set to true. If so, then we just use the width and // height of the control to calculate the radius. RoundedCornerRadius will be ignored // in this case. if (rcv.MakeCircle) { radius = Math.Min(Width, Height) / 2; } // When we create a round rect, we will have to double the radius since it is not // the same as creating a circle. radius *= 2; try { //Create path to clip the child var path = new Path(); path.AddRoundRect(new RectF(0, 0, Width, Height), new float[] { radius, radius, radius, radius, radius, radius, radius, radius }, Path.Direction.Ccw); canvas.Save(); canvas.ClipPath(path); // Draw the child first so that the border shows up above it. var result = base.DrawChild(canvas, child, drawingTime); canvas.Restore(); /* * If a border is specified, we use the same path created above to stroke * with the border color. * */ if (rcv.BorderWidth > 0) { // Draw a filled circle. var paint = new Paint(); paint.AntiAlias = true; paint.StrokeWidth = rcv.BorderWidth; paint.SetStyle(Paint.Style.Stroke); paint.Color = rcv.BorderColor.ToAndroid(); canvas.DrawPath(path, paint); paint.Dispose(); } //Properly dispose path.Dispose(); return(result); } catch (Exception ex) { System.Console.Write(ex.Message); } return(base.DrawChild(canvas, child, drawingTime)); }
public async Task GetSnacksMethod(bool Loaded, bool favourites) //ottiene la lista degli snack e la applica alla ListView { result = await snackServiceManager.GetSnacksAsync(); SnackFavarray = new object[result.data.snacks.Count]; ListView.ItemsSource = result.data.snacks; int FavIndex = 0; int index = 0; if (!Loaded) //!WORKAROUND! in questo modo si evita il crash ma la griglia non si aggiorna, urge investigazione sul vero problema { for (int i = 0; i <= result.data.snacks.Count; i++) { bool addfav = false; //variabile di appoggio bool visibilità = true; if (favourites && !Check_Favourites(result.data.snacks[i].id)) { addfav = true; } else if (favourites && Check_Favourites(result.data.snacks[i].id)) { visibilità = false; } ColorRandom c = new ColorRandom(); var mainDisplayInfo = DeviceDisplay.MainDisplayInfo; double latoCubo = App.Current.MainPage.Width / 2; double box = 170; var star19 = new Image { Aspect = Aspect.AspectFill, Source = ImageSource.FromResource("fondomerende.image.Star19.png"), Margin = new Thickness(5), }; var imageSnack = new Image { Aspect = Aspect.AspectFill, Margin = new Thickness(35), Source = ImageSource.FromUri(new Uri("http://fondomerende.madeinapp.net/api/getphoto.php?name=" + result.data.snacks[i].friendly_name)), }; var stackGrid = new StackLayout { WidthRequest = box, HeightRequest = box, InputTransparent = true, }; var griglia = new Grid() { }; var BordiSmussatiAndroid = new RoundedCornerView { HeightRequest = box, WidthRequest = box, RoundedCornerRadius = box / 2, BorderColor = c.GetRandomColor(), BorderWidth = 3, InputTransparent = true, Margin = new Thickness(10, 10, 10, 0) }; var BordiSmussatiiOS = new RoundedCornerView { HeightRequest = box, WidthRequest = box, RoundedCornerRadius = box / 4, BorderColor = c.GetRandomColor(), BorderWidth = 1, InputTransparent = true, Margin = new Thickness(10, 10, 10, 0) }; var label = new Label { HorizontalTextAlignment = TextAlignment.Center, VerticalTextAlignment = TextAlignment.End, Margin = new Thickness(0, 0, 0, 5), Text = result.data.snacks[i].friendly_name, FontAttributes = FontAttributes.Bold, FontSize = 16, InputTransparent = true, }; string e; if (Check_Favourites(result.data.snacks[i].id)) { e = "fondomerende.image.star_empty.png"; } else { e = "fondomerende.image.star_fill.png"; } var star = new ImageButton { HeightRequest = 20, WidthRequest = 20, Margin = new Thickness(0, 15, 15, 0), Scale = 1, Aspect = Aspect.Fill, Source = ImageSource.FromResource(e), HorizontalOptions = LayoutOptions.EndAndExpand, VerticalOptions = LayoutOptions.StartAndExpand, BackgroundColor = Color.Transparent }; var starAnimation = new AnimationView { Animation = "star.json", Scale = 1, Loop = false, HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, AutoPlay = false, InputTransparent = true, IsVisible = false, }; var eatAnimation = new AnimationView { Animation = "LoadingEating.json", Scale = 1.2, Rotation = 180, Loop = false, HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, AutoPlay = false, InputTransparent = true, IsVisible = false, }; var app = new StackLayout { Orientation = StackOrientation.Vertical, IsVisible = visibilità, }; var sfondo = new StackLayout { BackgroundColor = Color.FromHex("#ece0ce"), Opacity = 0.99 }; starAnimation.OnFinish -= StopAnimation; starAnimation.OnFinish += StopAnimation; griglia.Children.Add(sfondo); griglia.Children.Add(star19); griglia.Children.Add(imageSnack); if (!TabletManager.Instance.tablet) { griglia.Children.Add(star); } griglia.Children.Add(starAnimation); stackGrid.Children.Add(griglia); app.Children.Add(stackGrid); app.Children.Add(label); TapGestureRecognizer tg1 = new TapGestureRecognizer(); tg1.NumberOfTapsRequired = 1; tg1.Tapped += Tgr_Tapped; app.GestureRecognizers.Add(tg1); if (!TabletManager.Instance.tablet) { TapGestureRecognizer tg2 = new TapGestureRecognizer(); tg2.NumberOfTapsRequired = 2; tg2.Tapped += Tgr2_Tapped; app.GestureRecognizers.Add(tg2); } if (addfav && favourites) { if (FavIndex % 2 == 0) { Column0Fav.Children.Add(app); } else { Column1Fav.Children.Add(app); } Snackarray[FavIndex] = app; FavIndex++; } else { if (i % 2 == 0) { Column0.Children.Add(app); } else { Column1.Children.Add(app); } SnackFavarray[index] = app; index++; } } } }
private void PopupBuy() { Altezza = (GetAltezzaPagina() * 30) / 100; Larghezza = GetLarghezzaPagina() - 80; double banner = 50; Round = new RoundedCornerView //coso che stonda { RoundedCornerRadius = 20, HorizontalOptions = LayoutOptions.CenterAndExpand, VerticalOptions = LayoutOptions.Center, HeightRequest = Altezza, WidthRequest = Larghezza, }; var stackFondoAndroid = new StackLayout() //per android { HeightRequest = banner, WidthRequest = Larghezza, BackgroundColor = GetPrimaryAndroidColor(), Orientation = StackOrientation.Horizontal, }; var stackFondoiOS = new StackLayout() //per ios { HeightRequest = banner, WidthRequest = Larghezza, BackgroundColor = Color.Orange, Orientation = StackOrientation.Horizontal, }; var fondomerende = new Label //Label per Il titolo banner { Text = "Fondo merende", HorizontalOptions = LayoutOptions.CenterAndExpand, VerticalOptions = LayoutOptions.CenterAndExpand, FontSize = 20, FontAttributes = FontAttributes.Bold, TextColor = Color.White, }; lineAndroid = new LineEntry { Placeholder = "Quanti snack vuoi acquistare?", WidthRequest = 250, Keyboard = Keyboard.Numeric, Margin = new Thickness(0, 5, 0, 0), VerticalOptions = LayoutOptions.StartAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, HorizontalTextAlignment = TextAlignment.Center, }; prezzoAndroid = new LineEntry { Placeholder = "Inserire il prezzo", Keyboard = Keyboard.Numeric, WidthRequest = 250, IsVisible = false, VerticalOptions = LayoutOptions.StartAndExpand, Margin = new Thickness(0, 5, 0, 0), HorizontalOptions = LayoutOptions.CenterAndExpand, HorizontalTextAlignment = TextAlignment.Center, }; scadenzaAndroid = new LineEntry { Placeholder = "Inserire la scadenza", Keyboard = Keyboard.Numeric, WidthRequest = 250, Margin = new Thickness(0, 5, 0, 0), IsVisible = false, VerticalOptions = LayoutOptions.StartAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, HorizontalTextAlignment = TextAlignment.Center, }; lineiOs = new LineEntry { Placeholder = "Quanti snack vuoi acquistare?", WidthRequest = 250, FontSize = 18, HeightRequest = 35, Margin = new Thickness(0, 10, 0, 0), Keyboard = Keyboard.Numeric, VerticalOptions = LayoutOptions.StartAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, HorizontalTextAlignment = TextAlignment.Center, }; prezzoiOs = new LineEntry { Placeholder = "Inserire il prezzo", Keyboard = Keyboard.Numeric, WidthRequest = 250, FontSize = 18, HeightRequest = 35, VerticalOptions = LayoutOptions.StartAndExpand, IsVisible = false, HorizontalOptions = LayoutOptions.CenterAndExpand, HorizontalTextAlignment = TextAlignment.Center, }; scadenzaiOs = new LineEntry { Placeholder = "Inserire la scadenza", Keyboard = Keyboard.Numeric, WidthRequest = 250, FontSize = 18, HeightRequest = 35, VerticalOptions = LayoutOptions.StartAndExpand, IsVisible = false, HorizontalOptions = LayoutOptions.CenterAndExpand, HorizontalTextAlignment = TextAlignment.Center, }; stackBody = new StackLayout //stack principale dove è contenuto l'interno di tutto (tranne round che stonda) { HeightRequest = Altezza, WidthRequest = Larghezza, BackgroundColor = Color.White, }; var stackBottoni = new StackLayout //stack che contiene la gridlia dei bottoni { VerticalOptions = LayoutOptions.EndAndExpand, WidthRequest = Larghezza, HeightRequest = banner, MinimumHeightRequest = banner, }; var griglia = new Grid //griglia che contiene i bottoni { }; immagine = new ImageButton { Source = ImageSource.FromResource("fondomerende.image.Edit_Icon_32x32.png"), CornerRadius = 20, Scale = 1.5, BackgroundColor = Color.Transparent, Margin = new Thickness(0, 0, 15, 0), Aspect = Aspect.AspectFit, }; buttonCancel = new Button { Text = "Annulla", VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, BackgroundColor = Color.Transparent, }; buttonConfirm = new Button { Text = "Conferma", VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, BackgroundColor = Color.Transparent, }; stackBottoni.Children.Add(griglia); griglia.Children.Add((buttonCancel)); //inzia nella prima colonna griglia.Children.Add((buttonConfirm)); //inizia seconda colonna Grid.SetColumn(buttonCancel, 0); //mi è toccato farlo qui Grid.SetColumn(buttonConfirm, 1); switch (Device.RuntimePlatform) { case Device.Android: stackFondoAndroid.Children.Add(fondomerende); stackFondoAndroid.Children.Add(immagine); stackBody.Children.Add(stackFondoAndroid); immagine.Clicked += Immagine_Clicked; prezzoAndroid.TextChanged += EntrataPrezzoAndroid; buttonCancel.Clicked += Discard_Clicked; buttonConfirm.Clicked += Apply_ClickedAndroid; stackBody.Children.Add(lineAndroid); stackBody.Children.Add(prezzoAndroid); stackBody.Children.Add(scadenzaAndroid); stackBody.Children.Add(stackBottoni); Round.Children.Add(stackBody); break; case Device.iOS: stackFondoiOS.Children.Add(fondomerende); stackFondoiOS.Children.Add(immagine); stackBody.Children.Add(stackFondoiOS); immagine.Clicked += Immagine_Clicked; prezzoAndroid.TextChanged += EntrataPrezzoiOs; buttonCancel.Clicked += Discard_Clicked; buttonConfirm.Clicked += Apply_ClickediOs; stackBody.Children.Add(lineiOs); stackBody.Children.Add(prezzoiOs); stackBody.Children.Add(scadenzaiOs); stackBody.Children.Add(stackBottoni); Round.Children.Add(stackBody); break; } // entry.TextChanged += Entrata; PopupBuySnack.Content = Round; }