using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone { /// /// 场景和功能之间相互切换的Tab控件(完成初始化后,会根据默认选择调用回调函数) /// 2020.03.10变更:它变更为文字型菜单控件 /// public class SceneFunctionSwitchControl : HorizontalScrolViewLayout { #region ■ 变量声明___________________________ /// /// 选择事件(从0开始) /// public Action SelectTabEvent = null; /// /// 前回选择的索引 /// public int OldSelectIndex = 0; private int m_nowSelectIndex = 0; /// /// 当前选择的分支(从0开始) /// public int nowSelectIndex { get { return m_nowSelectIndex; } } /// /// 所有名字的控件 /// private List listNameControl = new List(); /// /// 所有线的控件 /// private List listLineControl = new List(); /// /// 默认的那个菜单 /// private FrameLayoutStatuControl frameDefult = null; #endregion #region ■ 初始化_____________________________ /// /// 场景和功能之间相互切换的Tab控件(完成初始化后,会根据默认选择调用回调函数) /// public SceneFunctionSwitchControl() { this.Height = Application.GetRealHeight(90); } /// /// 初始化控件(事件要至于它之前) /// /// 菜单文字列表 /// 右边空白宽度 public void InitControl(List listTitleText, int rightSpace = 0) { if (listTitleText.Count == 0) { return; } this.listNameControl.Clear(); this.listLineControl.Clear(); var btnTemp = new NormalViewControl(10, 10, false); btnTemp.TextSize = 16; //做成头部菜单文字 for (int i = 0; i < listTitleText.Count; i++) { btnTemp.Text = listTitleText[i]; //添加标题控件 this.AddTitleTextControl(i, listTitleText[i], btnTemp.GetRealWidthByText()); } //添加右边空白宽度 if (rightSpace > 0) { //添加一个间隔间距 var frameSpace = new FrameLayout(); frameSpace.Width = Application.GetRealWidth(rightSpace); this.AddChidren(frameSpace); } //回调方法 this.frameDefult.ButtonClickEvent?.Invoke(null, null); } /// /// 添加标题控件 /// /// /// private void AddTitleTextControl(int i_index, string titleText, int realWidth) { //添加一个间隔间距 var frameSpace = new FrameLayout(); frameSpace.Width = Application.GetRealWidth(58); this.AddChidren(frameSpace); //场景框(点击范围有点小,需要扩大它的点击范围) var frameBack = new FrameLayoutStatuControl(); frameBack.UseClickStatu = false; frameBack.Width = realWidth; this.AddChidren(frameBack); //名称 var btnName = new NormalViewControl(frameBack.Width, Application.GetRealHeight(63), false); btnName.Text = titleText; btnName.TextAlignment = TextAlignment.Center; if (m_nowSelectIndex == i_index) { this.frameDefult = frameBack; //选择状态 btnName.TextSize = 16; btnName.IsBold = true; btnName.TextColor = UserCenterColor.Current.TextColor2; } else { btnName.TextColor = UserCenterColor.Current.TextGrayColor3; } frameBack.AddChidren(btnName, ChidrenBindMode.BindEvent); //添加缓存 this.listNameControl.Add(btnName); //底线 var btnLine = new NormalViewControl(40, 10, true); btnLine.Y = btnName.Bottom + Application.GetRealHeight(6); btnLine.X = btnName.X + btnName.Width / 2 - Application.GetRealWidth(40) / 2; btnLine.Radius = (uint)Application.GetRealHeight(10) / 2; btnLine.BackgroundColor = UserCenterColor.Current.TextOrangeColor; frameBack.AddChidren(btnLine, ChidrenBindMode.BindEvent); if (m_nowSelectIndex != i_index) { btnLine.Visible = false; } //添加缓存 this.listLineControl.Add(btnLine); frameBack.ButtonClickEvent += (sender, e) => { //选择的是同一个分支,则无效 if (this.m_nowSelectIndex == i_index && e != null) { //手动点击的才处理 return; } this.OldSelectIndex = this.m_nowSelectIndex; this.m_nowSelectIndex = i_index; //当前文字变色 btnName.TextSize = 16; btnName.TextColor = UserCenterColor.Current.TextColor2; btnName.IsBold = true; btnLine.Visible = true; //还原其他的颜色 for (int i = 0; i < listNameControl.Count; i++) { if (this.m_nowSelectIndex != i) { listNameControl[i].TextSize = 14; listNameControl[i].IsBold = false; listNameControl[i].TextColor = UserCenterColor.Current.TextGrayColor3; listLineControl[i].Visible = false; } } this.SelectTabEvent?.Invoke(i_index); }; } #endregion #region ■ 控件摧毁___________________________ /// /// 控件摧毁 /// public override void RemoveFromParent() { this.SelectTabEvent = null; if (this.Parent != null) { base.RemoveFromParent(); } } /// /// ☆☆移除全部控件☆☆ /// public override void RemoveAll() { if (this.Parent != null) { base.RemoveAll(); } } #endregion #region ■ 一般方法___________________________ /// /// 设置初始选择 /// /// 从0开始 public void SetDefultIndex(int index) { if (frameDefult != null && frameDefult.Parent != null) { if (index < this.listNameControl.Count) { this.ScrollToViewIndex(index * 2 + 1); //调用点击事件 this.listNameControl[index].ButtonClickEvent(null, null); } return; } this.m_nowSelectIndex = index; } #endregion } }