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
}
}