using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone.UserCenter
|
{
|
/// <summary>
|
/// <para>场景和功能之间相互切换的Tab控件(完成初始化后,会根据默认选择调用回调函数)</para>
|
/// <para>2020.03.10变更:它变更为文字型菜单控件</para>
|
/// </summary>
|
public class SceneFunctionSwitchControl : FrameLayout
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 选择事件(从0开始)
|
/// </summary>
|
public Action<int> SelectTabEvent = null;
|
|
private int m_nowSelectIndex = 0;
|
/// <summary>
|
/// 当前选择的分支(从0开始)
|
/// </summary>
|
public int nowSelectIndex
|
{
|
get { return m_nowSelectIndex; }
|
}
|
|
/// <summary>
|
/// 所有名字的控件
|
/// </summary>
|
private List<NormalViewControl> listNameControl = new List<NormalViewControl>();
|
/// <summary>
|
/// 所有线的控件
|
/// </summary>
|
private List<NormalViewControl> listLineControl = new List<NormalViewControl>();
|
/// <summary>
|
/// 默认的那个菜单
|
/// </summary>
|
private FrameLayoutStatuControl frameDefult = null;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 场景和功能之间相互切换的Tab控件(完成初始化后,会根据默认选择调用回调函数)
|
/// </summary>
|
public SceneFunctionSwitchControl()
|
{
|
this.Height = Application.GetRealHeight(90);
|
this.Y = Application.GetRealHeight(40);
|
}
|
|
/// <summary>
|
/// 初始化控件(事件要至于它之前)
|
/// </summary>
|
/// <param name="listTitleText">菜单文字列表</param>
|
public void InitControl(List<string> listTitleText)
|
{
|
var btnTemp = new NormalViewControl(10, 10, false);
|
btnTemp.TextSize = 16;
|
|
//做成头部菜单文字
|
int XX = 0;
|
for (int i = 0; i < listTitleText.Count; i++)
|
{
|
btnTemp.Text = listTitleText[i];
|
//开始初始化
|
XX = this.InitTitleTextControl(i, listTitleText[i], btnTemp.GetRealWidthByText(), XX);
|
}
|
//回调方法
|
this.frameDefult.ButtonClickEvent?.Invoke(null, null);
|
}
|
|
/// <summary>
|
/// 初始化标题控件
|
/// </summary>
|
/// <param name="i_index"></param>
|
/// <param name="titleText"></param>
|
private int InitTitleTextControl(int i_index, string titleText, int realWidth, int XX)
|
{
|
//场景框(点击范围有点小,需要扩大它的点击范围)
|
var frameBack = new FrameLayoutStatuControl();
|
frameBack.UseClickStatu = false;
|
frameBack.Height = Application.GetRealHeight(90);
|
frameBack.Width = realWidth;
|
frameBack.X = XX + Application.GetRealWidth(58);
|
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.BindEventOnly);
|
//添加缓存
|
this.listNameControl.Add(btnName);
|
|
//底线
|
var btnLine = new NormalViewControl(40, 10, true);
|
btnLine.Y = btnName.Bottom + Application.GetRealHeight(14);
|
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.BindEventOnly);
|
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.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);
|
};
|
|
//返回这个控件的右坐标
|
return frameBack.Right;
|
}
|
|
#endregion
|
|
#region ■ 控件摧毁___________________________
|
|
/// <summary>
|
/// 控件摧毁
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
this.SelectTabEvent = null;
|
|
base.RemoveFromParent();
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 设置初始选择(请在初始化完成之前调用)
|
/// </summary>
|
/// <param name="index">从0开始</param>
|
public void SetDefultIndex(int index)
|
{
|
this.m_nowSelectIndex = index;
|
}
|
|
#endregion
|
}
|
}
|