using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.DevicePanel { /// /// 按键面板的指示灯配置的菜单界面★ /// public class PanelPilolightSettionForm : UserCenterCommonForm { #region ■ 变量声明___________________________ /// /// 按键面板的回路设备 /// private Panel panel = null; /// /// 指示灯状态区分 1:正常状态 2:点击后的状态 /// private StatuMode PilolightStatu = StatuMode.Normal; /// /// 图标控件 /// private Dictionary dicIconContr = new Dictionary(); /// /// 选择的RGB /// private List listRGB = null; /// /// 按键原来的颜色数据 /// private Panel.KeyColorData keyColorData = null; /// /// 颜色选择的打勾控件 /// private IconViewControl btnCheckContr = null; /// /// 备选颜色的FrameLayout /// private FrameLayout defultColorFrame = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 按键面板的回路设备 /// 指示灯状态区分 1:正常状态 2:点击后的状态 public void ShowForm(Panel i_panel, StatuMode i_statu) { this.panel = i_panel; this.PilolightStatu = i_statu; this.dicIconContr.Clear(); if (i_statu == StatuMode.Normal) { //设置头部信息:正常状态 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uNormalStatu)); } else if (i_statu == StatuMode.ClickStatu) { //设置头部信息:点击后的状态 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAfterClickStatu)); } //完成 var btnfinish = new TopLayoutFinshView(); topFrameLayout.AddChidren(btnfinish); btnfinish.MouseUpEventHandler += (sender, e) => { if (listRGB == null) { this.CloseForm(); return; } //将颜色设置到面板 this.SetSelectColorToPanel(); }; //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { //初始化颜色圆盘控件 var frame = this.InitColorPictrueControl(); //初始化备用颜色的控件 this.InitSpareColorControl(frame); //从网关获取颜色信息然后设置到界面 this.GetColorAndSetToForm(); } #endregion #region ■ 初始化颜色圆盘_____________________ /// /// 初始化颜色圆盘控件 /// private FrameLayout InitColorPictrueControl() { //颜色调节 var btnMsg = new ViewNormalControl(800, true); btnMsg.X = ControlCommonResourse.XXLeft; btnMsg.Y = Application.GetRealHeight(40); btnMsg.TextID = R.MyInternationalizationString.uColorRegulation; bodyFrameLayout.AddChidren(btnMsg); //圆盘控件的FrameLayout var frame = new FrameLayout(); frame.Y = btnMsg.Bottom + Application.GetRealHeight(50); frame.Width = Application.GetMinRealAverage(720); frame.Height = Application.GetRealHeight(720); frame.Gravity = Gravity.CenterHorizontal; bodyFrameLayout.AddChidren(frame); //圆盘控件 var colorPic = new ColorPicker(); colorPic.ColorImagePath = "Item/PickerColorWheel.png"; frame.AddChidren(colorPic); //白点控件 var btnWhiteView = new IconViewControl(20); btnWhiteView.Visible = false; btnWhiteView.BackgroundColor = UserCenterColor.Current.White; btnWhiteView.Radius = (uint)Application.GetMinRealAverage(20) / 2; frame.AddChidren(btnWhiteView); colorPic.ColorChaged += (sender, eColor) => { listRGB = new List(); listRGB.Add(Convert.ToInt32(Convert.ToString(eColor[0]))); listRGB.Add(Convert.ToInt32(Convert.ToString(eColor[1]))); listRGB.Add(Convert.ToInt32(Convert.ToString(eColor[2]))); this.dicIconContr["Defult"].BackgroundColor = this.GetColorByRGB(eColor[0], eColor[1], eColor[2]); this.dicIconContr["Defult"].Tag = listRGB; //显示打勾选择颜色的控件 this.ShowSelectColorControl(this.dicIconContr["Defult"]); }; colorPic.MouseDownEventHandler += (sender, e) => { //显示白点 btnWhiteView.X = (int)e.X; btnWhiteView.Y = (int)e.Y; btnWhiteView.Visible = true; }; return frame; } #endregion #region ■ 将颜色设置到面板___________________ /// /// 将选择的颜色设置到面板 /// private async void SetSelectColorToPanel() { if (PilolightStatu == StatuMode.Normal) { this.keyColorData.CloseColorR = Convert.ToString(listRGB[0], 16); this.keyColorData.CloseColorG = Convert.ToString(listRGB[1], 16); this.keyColorData.CloseColorB = Convert.ToString(listRGB[2], 16); } else { this.keyColorData.OpenColorR = Convert.ToString(listRGB[0], 16); this.keyColorData.OpenColorG = Convert.ToString(listRGB[1], 16); this.keyColorData.OpenColorB = Convert.ToString(listRGB[2], 16); } //设置按键面板指定端点的【指示灯开关颜色】的信息 var result = await Common.LocalDevice.Current.SetPanelEpointColorInfo(this.panel, this.keyColorData); if (result == false) { return; } Application.RunOnMainThread(() => { this.CloseForm(); }); } #endregion #region ■ 从网关获取颜色信息_________________ /// /// 从网关获取颜色信息然后设置到界面 /// private async void GetColorAndSetToForm() { //开启进度条 this.ShowProgressBar(); this.keyColorData = await Common.LocalDevice.Current.GetPanelEpointColorInfo(this.panel); if (this.keyColorData == null) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } //关闭进度条 this.CloseProgressBar(); int R = PilolightStatu == StatuMode.Normal ? Convert.ToInt32(this.keyColorData.CloseColorR, 16) : Convert.ToInt32(this.keyColorData.OpenColorR, 16); int G = PilolightStatu == StatuMode.Normal ? Convert.ToInt32(this.keyColorData.CloseColorG, 16) : Convert.ToInt32(this.keyColorData.OpenColorG, 16); int B = PilolightStatu == StatuMode.Normal ? Convert.ToInt32(this.keyColorData.CloseColorB, 16) : Convert.ToInt32(this.keyColorData.OpenColorB, 16); //设置背景色 string keys = this.GetColorKeys(R, G, B); if (this.dicIconContr.ContainsKey(keys) == false) { keys = "Defult"; } uint backColor = this.GetColorByRGB((byte)R, (byte)G, (byte)B); Application.RunOnMainThread(() => { this.dicIconContr[keys].BackgroundColor = backColor; //显示打勾选择颜色的控件 this.ShowSelectColorControl(this.dicIconContr[keys]); }); } #endregion #region ■ 初始化预选颜色_____________________ /// /// 初始化备用颜色的控件 /// /// 颜色圆盘控件的FrameLayout private void InitSpareColorControl(FrameLayout frame) { //控件大小 int size = Application.GetMinRealAverage(100); //控件数 var dicColor = this.InitSpareDefultColor(); int controlCount = dicColor.Count; //控件间的间隔 int space = (bodyFrameLayout.Width - controlCount * size) / (controlCount + 1); //比颜色控件高一点 this.defultColorFrame = new FrameLayout(); this.defultColorFrame.Height = Application.GetRealHeight(120); this.defultColorFrame.Y = frame.Bottom + Application.GetRealHeight(120); bodyFrameLayout.AddChidren(this.defultColorFrame); foreach (var keys in dicColor.Keys) { //添加图标 var btnIcon = this.AddColorIconControl(this.defultColorFrame, dicColor[keys], size, space); this.dicIconContr[keys] = btnIcon; } } /// /// 添加一个显示颜色的控件 /// /// 父容器 /// RGB /// 图标大小 /// 控件间隔 private IconViewControl AddColorIconControl(FrameLayout frame, List litColor, int size, int Space) { byte R = (byte)litColor[0]; byte G = (byte)litColor[1]; byte B = (byte)litColor[2]; var btnColor = new IconViewControl(size, false); btnColor.Tag = litColor; btnColor.Radius = 5; btnColor.BorderWidth = 1; btnColor.Gravity = Gravity.CenterVertical; btnColor.BorderColor = UserCenterColor.Current.TextFrameColor; btnColor.BackgroundColor = this.GetColorByRGB(R, G, B); //计算X轴坐标 int XX = Space; var myView = frame.GetChildren(frame.ChildrenCount - 1); if (myView != null) { XX = myView.Right + Space; } btnColor.X = XX; frame.AddChidren(btnColor); //单击颜色 btnColor.MouseUpEventHandler += (sender, e) => { this.listRGB = (List)btnColor.Tag; //显示打勾选择颜色的控件 this.ShowSelectColorControl(btnColor); }; return btnColor; } /// /// 显示打勾选择颜色的控件 /// /// private void ShowSelectColorControl(IconViewControl control) { if (this.btnCheckContr == null) { this.btnCheckContr = new IconViewControl(); this.btnCheckContr.InitAvgSize(72, 61); this.btnCheckContr.UnSelectedImagePath = "Item/Check.png"; this.defultColorFrame.AddChidren(this.btnCheckContr); } int XX = control.X + (control.Width - this.btnCheckContr.Width) / 2; this.btnCheckContr.X = XX; this.btnCheckContr.Gravity = Gravity.CenterVertical; } #endregion #region ■ 一般方法___________________________ /// /// 初始化备用颜色的默认值 /// /// private Dictionary> InitSpareDefultColor() { var dic = new Dictionary>(); dic["Defult"] = new List() { 208, 199, 186 }; dic["114-182-216"] = new List() { 114, 182, 216 }; dic["224-144-218"] = new List() { 224, 144, 218 }; dic["232-235-195"] = new List() { 232, 235, 195 }; dic["212-156-197"] = new List() { 212, 156, 197 }; dic["178-229-236"] = new List() { 178, 229, 236 }; return dic; } /// /// 将RGB转换为颜色 /// /// /// /// /// private uint GetColorByRGB(byte R, byte G, byte B) { return (uint)(0xFF000000 + R * 256 * 256 + G * 256 + B); } /// /// 获取字典颜色的主键 /// /// /// private string GetColorKeys(byte[] listRGB) { int R = Convert.ToInt32(Convert.ToString(listRGB[0])); int G = Convert.ToInt32(Convert.ToString(listRGB[1])); int B = Convert.ToInt32(Convert.ToString(listRGB[2])); return this.GetColorKeys(R, G, B); } /// /// 获取字典颜色的主键 /// /// /// /// /// private string GetColorKeys(int R, int G, int B) { return R + "-" + G + "-" + B; } #endregion } }