using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone
{
///
/// 文本组合的菜单控件
///
public class TextGroupMenuControl : FrameLayout
{
#region ■ 变量声明___________________________
///
/// 选择事件
///
public Action SelectEvent = null;
///
/// 当前选择的主键(内部使用)
///
private string oldSelectKey = string.Empty;
///
/// 当前选择的主键
///
public string nowSelectKeys
{
get
{
return oldSelectKey;
}
}
///
/// 前回选择的控件
///
private FrameLayoutStatuControl oldFrameBack = null;
///
/// 前回选择的控件
///
private NormalViewControl oldBtnText = null;
///
/// 文本对象
///
private Dictionary dicText = new Dictionary();
#endregion
#region ■ 初始化_____________________________
///
/// 文本组合的菜单控件(完成初始化后,会根据默认选择调用回调函数)
///
/// 文本集合(key:主键 value:显示文本)
public TextGroupMenuControl(Dictionary i_dicText)
{
this.dicText = i_dicText;
this.Height = Application.GetRealHeight(204);
}
///
/// 初始化控件(事件要至于它之前)
///
public void InitControl()
{
var scrolContr = new HorizontalScrolViewLayout();
scrolContr.Gravity = Gravity.CenterVertical;
scrolContr.Height = this.Height;
this.AddChidren(scrolContr);
//弄个空的进去占位置
var frameTemp = new FrameLayout();
frameTemp.Height = this.Height;
frameTemp.Width = ControlCommonResourse.XXLeft / 2;
scrolContr.AddChidren(frameTemp);
var btnTempWidth = new ButtonBase();
btnTempWidth.TextSize = 12;
//初始化设备模式的控件
int defultIndex = -1;
int index = 0;
foreach (string strKeys in dicText.Keys)
{
index++;
if (oldSelectKey == string.Empty)
{
//初始值
oldSelectKey = strKeys;
defultIndex = index;
}
//计算字符的真实宽度
btnTempWidth.Text = dicText[strKeys];
this.DoInitControl(scrolContr, strKeys, btnTempWidth.Text, btnTempWidth.GetRealWidthByText());
}
//让控件滑动到指定的索引位置
if (defultIndex != -1)
{
scrolContr.ScrollToViewIndex(defultIndex + 1);
}
}
///
/// 初始化控件
///
/// 列表控件
/// 字典的主键
/// 显示文本
/// 文本真实宽度
private void DoInitControl(HorizontalScrolViewLayout scrolContr, string strKey, string text, int textWidth)
{
//带底图控件的最小宽度
int minWidth = Application.GetRealWidth(255);
//带底图控件的真实宽度 <文字的宽度的计算 frameBack.Width - (int)(frameBack.Height * 0.47)>
int realWidth = textWidth + (int)(Application.GetRealHeight(159) * 0.47);
if (realWidth < minWidth)
{
realWidth = minWidth;
}
//带图片的
var frameBack = new FrameLayoutStatuControl();
frameBack.UseClickStatu = false;
frameBack.Gravity = Gravity.Center;
frameBack.Height = Application.GetRealHeight(159);
frameBack.Width = realWidth;
if (oldSelectKey == strKey)
{
frameBack.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png";
oldFrameBack = frameBack;
}
else
{
frameBack.BackgroundImagePath = "Item/RoomIconBackground.png";
}
scrolContr.AddChidren(frameBack);
//文字
var btnText = new NormalViewControl(textWidth, frameBack.Height, false);
btnText.Gravity = Gravity.CenterHorizontal;
btnText.Text = text;
btnText.TextSize = 12;
btnText.TextAlignment = TextAlignment.Center;
if (oldSelectKey == strKey)
{
btnText.TextColor = UserCenterColor.Current.White;
oldBtnText = btnText;
}
else
{
btnText.TextColor = UserCenterColor.Current.TextGrayColor1;
}
frameBack.AddChidren(btnText, ChidrenBindMode.BindEvent);
frameBack.ButtonClickEvent += (sender, e) =>
{
if (oldSelectKey == strKey)
{
//同一个东西
return;
}
oldSelectKey = strKey;
//状态变更
frameBack.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png";
btnText.TextColor = UserCenterColor.Current.White;
oldFrameBack.BackgroundImagePath = "Item/RoomIconBackground.png";
oldBtnText.TextColor = UserCenterColor.Current.TextGrayColor1;
oldFrameBack = frameBack;
oldBtnText = btnText;
//调用回调函数
this.SelectEvent?.Invoke(strKey, this.dicText[strKey]);
};
//调用回调函数
if (oldSelectKey == strKey)
{
this.SelectEvent?.Invoke(strKey, this.dicText[strKey]);
}
}
#endregion
#region ■ 控件摧毁___________________________
///
/// 控件摧毁
///
public override void RemoveFromParent()
{
this.SelectEvent = null;
base.RemoveFromParent();
}
#endregion
#region ■ 一般方法___________________________
///
/// 设置初始选择(请在初始化完成之前调用)
///
/// 主键
public void SetDefultIndex(string strKey)
{
this.oldSelectKey = strKey;
}
#endregion
}
}