/// <summary>Initialize the specified context, attrs and style.</summary> /// <param name="context">Context.</param> /// <param name="attrs">Attrs.</param> /// <param name="style">Style.</param> private void Initialize(Context context, IAttributeSet attrs, int style) { if (attrs != null) { var styledAttributes = context.ObtainStyledAttributes(attrs, Resource.Styleable.SatelliteMenu, style, 0); Radius = styledAttributes.GetDimensionPixelSize(Resource.Styleable.SatelliteMenu_radius, DEFAULT_RADIUS); ItemsAngle = styledAttributes.GetFloat(Resource.Styleable.SatelliteMenu_itemsAngle, DEFAULT_ITEMS_ANGLE); CloseItemsOnClick = styledAttributes.GetBoolean(Resource.Styleable.SatelliteMenu_closeOnClick, DEFAULT_CLOSE_ON_CLICK); Speed = styledAttributes.GetInt(Resource.Styleable.SatelliteMenu_speed, DEFAULT_SPEED); styledAttributes.Recycle(); } _mainRotateLeft = PopoutAnimationFactory.CreateMainButtonAnimation(context); _mainRotateLeft.AnimationEnd += (param0, param1) => _plusAnimationActive = false; _mainRotateRight = PopoutAnimationFactory.CreateMainButtonInverseAnimation(context); _mainRotateRight.AnimationStart += (param0, param1) => _plusAnimationActive = false; }
public void AddItems(SatelliteMenuButtonItem[] items) { _menuItems.AddRange(items); RemoveView(_imgMain); new TextView(Context).LayoutParameters = new ViewGroup.LayoutParams(0, 0); var degrees = GetDegrees(_menuItems.Count, ItemsAngle); var index = 0; foreach (var menuItem in _menuItems) { var translateX = PopoutAnimationFactory.GetTranslateX(degrees[index], Radius); var translateY = PopoutAnimationFactory.GetTranslateY(degrees[index], Radius); var imageView1 = (ImageView) LayoutInflater.From(Context).Inflate(Resource.Layout.popoutMenuItem, this, false); var imageView2 = (ImageView) LayoutInflater.From(Context).Inflate(Resource.Layout.popoutMenuItem, this, false); imageView1.Tag = menuItem.Tag; imageView2.Visibility = ViewStates.Gone; imageView1.Visibility = ViewStates.Gone; imageView2.Click += (sender, e) => { if (!(sender is View)) { return; } var viewToItem = _viewToItemMap[(View)sender]; ((View)sender).StartAnimation(viewToItem.ClickAnimation); if (MenuItemClick == null) { return; } MenuItemClick(this, new SatelliteMenuItemEventArgs() { MenuItem = viewToItem }); }; imageView2.Tag = menuItem.Tag; var layoutParameters = imageView2.LayoutParameters as MarginLayoutParams; if (layoutParameters != null) { layoutParameters.BottomMargin = Math.Abs(translateY); layoutParameters.LeftMargin = Math.Abs(translateX); imageView2.LayoutParameters = layoutParameters; } if (menuItem.ImgResourceId > 0) { imageView1.SetImageResource(menuItem.ImgResourceId); imageView2.SetImageResource(menuItem.ImgResourceId); } else if (menuItem.ImgDrawable != null) { imageView1.SetImageDrawable(menuItem.ImgDrawable); imageView2.SetImageDrawable(menuItem.ImgDrawable); } var itemOutAnimation = PopoutAnimationFactory.CreateItemOutAnimation(Context, index, Speed, translateX, translateY); var itemInAnimation = PopoutAnimationFactory.CreateItemInAnimation(Context, index, Speed, translateX, translateY); var itemClickAnimation = PopoutAnimationFactory.CreateItemClickAnimation(Context); menuItem.View = imageView1; menuItem.CloneView = imageView2; menuItem.InAnimation = itemInAnimation; menuItem.OutAnimation = itemOutAnimation; menuItem.ClickAnimation = itemClickAnimation; menuItem.FinalX = translateX; menuItem.FinalY = translateY; itemInAnimation.SetAnimationListener( new AnimationListener(imageView1, true, _viewToItemMap)); itemOutAnimation.SetAnimationListener( new AnimationListener(imageView1, false, _viewToItemMap)); itemClickAnimation.SetAnimationListener( new ClickAnimationListener(this, menuItem.Tag)); AddView(imageView1); AddView(imageView2); _viewToItemMap.Add(imageView1, menuItem); _viewToItemMap.Add(imageView2, menuItem); ++index; } AddView(_imgMain); }