private void init(Context context, Android.Util.IAttributeSet attrs, int defStyle) { LayoutInflater.From(context).Inflate(Resource.Layout.sat_main, this, true); imgMain = FindViewById <ImageView>(Resource.Id.sat_main); if (attrs != null) { TypedArray typedArray = context.ObtainStyledAttributes(attrs, Resource.Styleable.SatelliteMenu, defStyle, 0); satelliteDistance = typedArray.GetDimensionPixelSize(Resource.Styleable.SatelliteMenu_satelliteDistance, DEFAULT_SATELLITE_DISTANCE); totalSpacingDegree = typedArray.GetFloat(Resource.Styleable.SatelliteMenu_totalSpacingDegree, DEFAULT_TOTAL_SPACING_DEGREES); closeItemsOnClick = typedArray.GetBoolean(Resource.Styleable.SatelliteMenu_closeOnClick, DEFAULT_CLOSE_ON_CLICK); expandDuration = typedArray.GetInt(Resource.Styleable.SatelliteMenu_expandDuration, DEFAULT_EXPAND_DURATION); //float satelliteDistance = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 170, getResources().getDisplayMetrics()); typedArray.Recycle(); } mainRotateLeft = SatelliteAnimationCreator.createMainButtonAnimation(context); mainRotateRight = SatelliteAnimationCreator.createMainButtonInverseAnimation(context); mainRotateLeft.SetAnimationListener(this); mainRotateRight.SetAnimationListener(this); imgMain.Click += (s, e) => { onClick(); }; internalItemClickListener = new InternalSatelliteOnClickListener(this); }
public void addItems(List <SatelliteMenuItem> items) { foreach (var item in items) { menuItems.Add(item); } this.RemoveView(imgMain); TextView tmpView = new TextView(Context); tmpView.LayoutParameters = new FrameLayout.LayoutParams(0, 0); float[] degrees = getDegrees(menuItems.Count()); int index = 0; foreach (SatelliteMenuItem menuItem in menuItems) { int finalX = SatelliteAnimationCreator.getTranslateX( degrees[index], satelliteDistance); int finalY = SatelliteAnimationCreator.getTranslateY( degrees[index], satelliteDistance); ImageView itemView = (ImageView)LayoutInflater.From(Context) .Inflate(Resource.Layout.sat_item_cr, this, false); ImageView cloneView = (ImageView)LayoutInflater.From(Context) .Inflate(Resource.Layout.sat_item_cr, this, false); itemView.Tag = menuItem.getId(); cloneView.Visibility = ViewStates.Gone; itemView.Visibility = ViewStates.Gone; cloneView.SetOnClickListener(internalItemClickListener); cloneView.Tag = Java.Lang.Integer.ValueOf(menuItem.getId()); FrameLayout.LayoutParams layoutParams = getLayoutParams(cloneView); layoutParams.BottomMargin = Math.Abs(finalY); layoutParams.LeftMargin = Math.Abs(finalX); cloneView.LayoutParameters = layoutParams; if (menuItem.getImgResourceId() > 0) { itemView.SetImageResource(menuItem.getImgResourceId()); cloneView.SetImageResource(menuItem.getImgResourceId()); } else if (menuItem.getImgDrawable() != null) { itemView.SetImageDrawable(menuItem.getImgDrawable()); cloneView.SetImageDrawable(menuItem.getImgDrawable()); } Animation itemOut = SatelliteAnimationCreator.createItemOutAnimation(Context, index, expandDuration, finalX, finalY); Animation itemIn = SatelliteAnimationCreator.createItemInAnimation(Context, index, expandDuration, finalX, finalY); Animation itemClick = SatelliteAnimationCreator.createItemClickAnimation(Context); menuItem.setView(itemView); menuItem.setCloneView(cloneView); menuItem.setInAnimation(itemIn); menuItem.setOutAnimation(itemOut); menuItem.setClickAnimation(itemClick); menuItem.setFinalX(finalX); menuItem.setFinalY(finalY); itemIn.SetAnimationListener(new SatelliteAnimationListener(itemView, true, viewToItemDic)); itemOut.SetAnimationListener(new SatelliteAnimationListener(itemView, false, viewToItemDic)); itemClick.SetAnimationListener(new SatelliteItemClickAnimationListener(this, menuItem.getId())); this.AddView(itemView); this.AddView(cloneView); viewToItemDic.Add(itemView, menuItem); viewToItemDic.Add(cloneView, menuItem); index++; } this.AddView(imgMain); }