예제 #1
0
        /// <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;
        }
예제 #2
0
        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);
        }