using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone.UserCenter
|
{
|
/// <summary>
|
/// 做成一个存在于右上角的菜单控件
|
/// </summary>
|
public class TopRightMenuControl : FrameLayout
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 桌布控件
|
/// </summary>
|
private FrameLayout frameTable = null;
|
/// <summary>
|
/// 三角形图标
|
/// </summary>
|
private PicViewControl btnTriangle = null;
|
/// <summary>
|
/// 头部圆角控件
|
/// </summary>
|
private NormalViewControl btnTopRadius = null;
|
/// <summary>
|
/// 底部圆角控件
|
/// </summary>
|
private NormalViewControl btnBottomRadius = null;
|
/// <summary>
|
/// 前回选择的行
|
/// </summary>
|
private FrameLayoutControl oldRowFrame = null;
|
/// <summary>
|
/// 行高度
|
/// </summary>
|
private int RowHeight = 150;
|
/// <summary>
|
/// 行宽度
|
/// </summary>
|
//private int RowWidth = 449;
|
private int RowWidth = 395;
|
/// <summary>
|
/// 行数
|
/// </summary>
|
private int RowCount = 0;
|
/// <summary>
|
/// 菜单计数
|
/// </summary>
|
private int menuCount = 0;
|
/// <summary>
|
/// 圆角度
|
/// </summary>
|
private int tableRadius = Application.GetMinRealAverage(12);
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 做成一个存在于右上角的菜单控件
|
/// </summary>
|
/// <param name="frame">父容器控件</param>
|
/// <param name="i_RowCount">一共有几行</param>
|
/// <param name="i_width">这个菜单有多宽</param>
|
public TopRightMenuControl(FrameLayout frame, int i_RowCount, int i_width = 395)
|
{
|
this.RowCount = i_RowCount;
|
this.RowWidth = i_width;
|
//初始化画面的控件
|
this.InitFormControl(frame);
|
}
|
|
/// <summary>
|
/// 初始化画面的控件
|
/// </summary>
|
/// <param name="frame">父容器控件</param>
|
private void InitFormControl(FrameLayout frame)
|
{
|
this.BackgroundColor = UserCenterColor.Current.DialogBackColor;
|
this.MouseUpEventHandler += (sender2, e2) =>
|
{
|
//关闭自身
|
this.RemoveFromParent();
|
};
|
frame.AddChidren(this);
|
|
//桌布
|
this.frameTable = new FrameLayout();
|
//frameTable.X = Application.GetRealWidth(596);
|
//frameTable.Y = Application.GetRealHeight(184);
|
frameTable.X = Application.GetRealWidth(662 - (RowWidth - 395));
|
frameTable.Y = Application.GetRealHeight(158 + 15 + 1);
|
frameTable.Width = Application.GetRealWidth(RowWidth);
|
frameTable.Height = Application.GetRealHeight(RowHeight * this.RowCount) + (this.RowCount - 1) * ControlCommonResourse.BottomLineHeight;
|
frameTable.BackgroundColor = UserCenterColor.Current.White;
|
frameTable.Radius = (uint)tableRadius / 2;
|
this.AddChidren(frameTable);
|
|
//头部圆角控件
|
btnTopRadius = new NormalViewControl(frameTable.Width, tableRadius * 2, false);
|
btnTopRadius.Radius = (uint)tableRadius;
|
//btnTopRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround;
|
frameTable.AddChidren(btnTopRadius);
|
if (RowCount == 1)
|
{
|
btnTopRadius.BackgroundColor = UserCenterColor.Current.White;
|
}
|
//底部圆角控件
|
btnBottomRadius = new NormalViewControl(frameTable.Width, tableRadius * 2, false);
|
btnBottomRadius.Y = frameTable.Height - tableRadius * 2;
|
btnBottomRadius.Radius = (uint)tableRadius;
|
btnBottomRadius.BackgroundColor = UserCenterColor.Current.White;
|
frameTable.AddChidren(btnBottomRadius);
|
|
//三角形图标
|
btnTriangle = new PicViewControl(31, 15);
|
btnTriangle.X = Application.GetRealWidth(980);
|
//btnTriangle.Y = Application.GetRealHeight(169);
|
btnTriangle.Y = Application.GetRealHeight(158);
|
btnTriangle.UnSelectedImagePath = "Item/UpperTriangle.png";
|
this.AddChidren(btnTriangle);
|
}
|
|
#endregion
|
|
#region ■ 添加菜单___________________________
|
|
/// <summary>
|
/// 添加菜单行
|
/// </summary>
|
/// <param name="TextValue">显示的文字</param>
|
/// <param name="unSelectPic">图片</param>
|
/// <param name="selectPic">图片</param>
|
/// <param name="action">单击菜单执行的事件</param>
|
/// <param name="closeOnClick">单击的时候,关闭菜单</param>
|
public void AddRowMenu(string TextValue, string unSelectPic, string selectPic, Action action, bool closeOnClick = true)
|
{
|
NormalViewControl btnLine = null;
|
if (menuCount > 0)
|
{
|
//画线
|
btnLine = new NormalViewControl(Application.GetRealWidth(RowWidth - 81), ControlCommonResourse.BottomLineHeight, false);
|
btnLine.X = Application.GetRealWidth(81);
|
btnLine.Y = Application.GetRealHeight(RowHeight * menuCount) + menuCount * ControlCommonResourse.BottomLineHeight;
|
btnLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
|
frameTable.AddChidren(btnLine);
|
}
|
menuCount++;
|
|
var rowFrame = new FrameLayoutControl();
|
rowFrame.Height = Application.GetRealHeight(RowHeight);
|
rowFrame.Name = "Menu" + menuCount;
|
if (btnLine != null)
|
{
|
rowFrame.Y = btnLine.Bottom;
|
}
|
if (this.RowCount == 1)
|
{
|
//只有一个菜单
|
rowFrame.Y = tableRadius;
|
rowFrame.Height = Application.GetRealHeight(RowHeight) - tableRadius * 2;
|
}
|
frameTable.AddChidren(rowFrame);
|
//图标
|
var btnIcon = new IconViewControl(81);
|
btnIcon.X = Application.GetRealWidth(81);
|
btnIcon.Gravity = Gravity.CenterVertical;
|
btnIcon.UnSelectedImagePath = unSelectPic;
|
btnIcon.SelectedImagePath = selectPic;
|
rowFrame.AddChidren(btnIcon, ChidrenBindMode.BindEventOnly);
|
//显示文字
|
var btnText = new NormalViewControl(RowWidth - 173, 58, true);
|
btnText.X = Application.GetRealWidth(173);
|
btnText.Text = TextValue;
|
btnText.Gravity = Gravity.CenterVertical;
|
rowFrame.AddChidren(btnText, ChidrenBindMode.BindEventOnly);
|
if (menuCount > 1)
|
{
|
btnIcon.IsSelected = false;
|
btnText.TextColor = UserCenterColor.Current.TextGrayColor1;
|
}
|
|
if (this.RowCount == 1)
|
{
|
//如果只有一个菜单
|
}
|
else if (menuCount == 1)
|
{
|
//多个菜单模式的第一个菜单
|
rowFrame.Y = tableRadius;
|
rowFrame.Height -= tableRadius;
|
btnIcon.Y -= tableRadius / 2;
|
btnText.Y -= tableRadius / 2;
|
//第一个菜单默认设置为选择状态
|
this.SetRowSelectStatu(rowFrame, true);
|
this.oldRowFrame = rowFrame;
|
}
|
else if (menuCount == this.RowCount)
|
{
|
//多个菜单模式的最后一个菜单
|
rowFrame.Height -= tableRadius;
|
btnIcon.Y += tableRadius / 2;
|
btnText.Y += tableRadius / 2;
|
}
|
|
//选择状态
|
rowFrame.SelectStatuEvent += (statu) =>
|
{
|
//false为控件自身自动执行,这里不需要还原
|
if (statu == true)
|
{
|
//设置为选择状态
|
this.SetRowSelectStatu(rowFrame, true);
|
this.oldRowFrame = rowFrame;
|
}
|
};
|
|
//按键点击
|
rowFrame.ButtonClickEvent += (sender, e) =>
|
{
|
if (closeOnClick == true)
|
{
|
this.RemoveFromParent();
|
}
|
action?.Invoke();
|
};
|
}
|
#endregion
|
|
#region ■ 设置选择状态_______________________
|
|
/// <summary>
|
/// 设置选择状态
|
/// </summary>
|
/// <param name="frame">行控件</param>
|
/// <param name="select">选择的状态</param>
|
private void SetRowSelectStatu(FrameLayoutControl frame, bool select)
|
{
|
//图标
|
var btnIcon = (IconViewControl)frame.GetChildren(0);
|
if (btnIcon != null)
|
{
|
btnIcon.IsSelected = select;
|
}
|
//文本
|
var btnText = (NormalViewControl)frame.GetChildren(1);
|
if (btnText != null)
|
{
|
//btnText.TextColor = select == true ? UserCenterColor.Current.TextColor3 : UserCenterColor.Current.TextColor1;
|
btnText.TextColor = select == true ? UserCenterColor.Current.TextColor1 : UserCenterColor.Current.TextGrayColor1;
|
}
|
//背景色
|
//frame.BackgroundColor = select == true ? UserCenterColor.Current.BlackBackGround : UserCenterColor.Current.White;
|
|
if (this.RowCount == 1)
|
{
|
//如果只有一个菜单的话
|
//this.btnTopRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround;
|
//this.btnBottomRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround;
|
return;
|
}
|
//前回选择的菜单为null,或者是相同的东西,则不处理
|
if (this.oldRowFrame == null || this.oldRowFrame.Name == frame.Name)
|
{
|
return;
|
}
|
|
if (frame.Name == "Menu1")
|
{
|
//如果点击的是第一个菜单的话,变黑色
|
//this.btnTopRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround;
|
}
|
else
|
{
|
//变回白色
|
//this.btnTopRadius.BackgroundColor = UserCenterColor.Current.White;
|
}
|
|
if (frame.Name == "Menu" + this.RowCount)
|
{
|
//如果点击的是最后一个菜单的话,变黑色
|
//this.btnBottomRadius.BackgroundColor = UserCenterColor.Current.BlackBackGround;
|
}
|
else
|
{
|
//变回白色
|
//this.btnBottomRadius.BackgroundColor = UserCenterColor.Current.White;
|
}
|
//前回选择的行还原
|
this.SetRowSelectStatu(this.oldRowFrame, false);
|
}
|
|
#endregion
|
}
|
}
|