using System; using System.Collections.Generic; using System.Threading; using HDL_ON.DAL.Server; using HDL_ON.DriverLayer; using HDL_ON.Entity; using HDL_ON.UI.CSS; using Shared; namespace HDL_ON.UI { public class AddLightScene : FrameLayout { #region 控件列表 /// /// 当前窗体 /// static FrameLayout bodyView; /// /// 楼层选择下拉图标 /// Button btnFloorDownIcon; /// /// 楼层显示 /// Button btnFloor; /// /// 功能列表集合显示区域 /// static VerticalScrolViewLayout functionListView; /// /// 完成按钮 /// Button btnConfrim; #endregion /// /// 场景里面的功能列表 /// List sceneLishtList; /// /// 本地的灯光列表 /// List lightList; /// /// 场景对象 /// Scene scene; /// /// 回调刷新 /// Action backActon; public AddLightScene(List functions,Scene inParscene, Action action) { bodyView = this; sceneLishtList = functions; scene = inParscene; backActon = action; lightList = FunctionList.List.GetLightList(); } public void LoadPage() { bodyView.BackgroundColor = CSS_Color.BackgroundColor; new TopViewDiv(bodyView, Language.StringByID(StringId.CombinedDimming)).LoadTopView(); scene.name = Language.StringByID(StringId.CombinedDimming); /// /// 房间内容显示区域 /// var roomFloorChangeView = new FrameLayout() { Y = Application.GetRealHeight(64), Height = Application.GetRealHeight(52), }; bodyView.AddChidren(roomFloorChangeView); #region 房间顶部切换显示区域 btnFloorDownIcon = new Button() { Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), X = Application.GetRealWidth(16), Y = Application.GetRealHeight(18), UnSelectedImagePath = "Public/DownIcon.png", }; roomFloorChangeView.AddChidren(btnFloorDownIcon); btnFloor = new Button() { X = btnFloorDownIcon.Right, Y = Application.GetRealHeight(18), Width = Application.GetRealWidth(200), Height = Application.GetMinRealAverage(16), TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextAlignment = TextAlignment.CenterLeft, Text = DB_ResidenceData.Instance.CurFloor.roomName, }; roomFloorChangeView.AddChidren(btnFloor); #endregion functionListView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(64 + 52), Height = Application.GetRealHeight(640 - 12 - 52 -100), }; bodyView.AddChidren(functionListView); LoadLightRow(lightList); #region 底部view var bottomView = new FrameLayout() { Y = Application.GetRealHeight(591), Height = Application.GetRealHeight(100), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; this.AddChidren(bottomView); btnConfrim = new Button() { Y = Application.GetRealHeight(12), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(44), Radius = (uint)Application.GetRealHeight(22), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.BackgroundColor, TextID = StringId.Confirm, TextSize = CSS_FontSize.SubheadingFontSize, SelectedTextColor = CSS_Color.MainBackgroundColor, SelectedBackgroundColor = CSS_Color.MainColor, }; bottomView.AddChidren(btnConfrim); btnConfrim.MouseUpEventHandler = (sender, e) => { if (btnConfrim.IsSelected) { Action action = (objScene) => { backActon(objScene); this.RemoveFromParent(); }; var lightSceneDialog = new LightSceneEditDialog(sceneLishtList, scene, action); lightSceneDialog.ShowDialog(); } }; #endregion //加载功能筛选组件 LoadDialog_ChangeFloor(); } /// /// 加载功能row /// /// void LoadLightRow(List functions) { functionListView.RemoveAll(); foreach (var function in functions) { var functionDiv = new LightRow(function) { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(62), Radius = (uint)Application.GetMinRealAverage(12), BorderColor = 0x00FFFFFF, BorderWidth = 1, BackgroundColor = CSS_Color.MainBackgroundColor, Tag = function.spk + function.sid }; Action setAction = () => { if (sceneLishtList.Count > 0) { btnConfrim.IsSelected = true; } else { btnConfrim.IsSelected = false; } }; functionDiv.LoadDiv(sceneLishtList,setAction); functionListView.AddChidren(functionDiv); functionListView.AddChidren(new Button() { Height = Application.GetRealHeight(12) }); } } /// /// 住宅列表点击事件 /// void LoadDialog_ChangeFloor() { string nowSelectId = null; btnFloor.MouseUpEventHandler += (sender, e) => { //显示下拉列表 var form = new FloorRoomSelectPopupView(); form.ShowDeviceFunctionView(btnFloor, this.lightList, (selectId, listFunc) => { nowSelectId = selectId; //重新加载界面 LoadLightRow(listFunc); }, nowSelectId); }; } } public class LightRow : FrameLayout { #region 区域控件 static FrameLayout bodyDiv; /// /// 功能/场景icon /// Button btnIcon; /// /// 功能名称/场景名称 /// Button btnName; /// /// 楼层信息显示按钮 /// Button btnFromFloor; /// /// 选中按钮 /// Button btnSelect; #endregion #region 区域变量 Function function; #endregion public LightRow(Function func) { bodyDiv = this; bodyDiv.Tag = func.sid; function = func; } /// /// 加载控制卡片区域 /// public void LoadDiv(List functions,Action action) { btnIcon = new Button() { X = Application.GetRealWidth(10), Y = Application.GetRealHeight(15), Width = Application.GetRealWidth(32), Height = Application.GetRealWidth(32), UnSelectedImagePath = $"FunctionIcon/Icon/{function.IconName}.png" }; bodyDiv.AddChidren(btnIcon); btnName = new Button() { X = Application.GetRealWidth(8 + 10 + 32), Y = Application.GetRealHeight(10), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(24), Text = function.name, TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, }; bodyDiv.AddChidren(btnName); btnFromFloor = new Button() { X = Application.GetRealWidth(8 + 10 + 32), Y = Application.GetRealHeight(10 + 24), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(18), Text = function.GetRoomListName(), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; bodyDiv.AddChidren(btnFromFloor); btnSelect = new Button() { X = Application.GetRealWidth(303), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(32), Height = Application.GetRealWidth(32), UnSelectedImagePath = "FunctionIcon/Light/LightScene/CheckIcon.png", SelectedImagePath = "FunctionIcon/Light/LightScene/CheckOnIcon.png", IsSelected = functions.Find((obj) => obj.deviceId == function.deviceId) != null }; bodyDiv.AddChidren(btnSelect); btnSelect.MouseUpEventHandler = (sender, e) => { btnSelect.IsSelected = !btnSelect.IsSelected; if(btnSelect.IsSelected) { var addTemp = functions.Find((obj) => obj.deviceId == function.deviceId); if (addTemp == null) { functions.Add(function); } } else { var removeTemp = functions.Find((obj) => obj.deviceId == function.deviceId); if (removeTemp != null) { functions.Remove(removeTemp); } } ///刷新界面 if (functions.Count == 0 || functions.Count == 1) { action(); } }; } } /// /// 灯光场景编辑弹窗 /// public class LightSceneEditDialog :Dialog { /// /// 传入的灯光列表 /// 加入场景控制功能列表 /// List lights; /// /// 临时灯光对象 /// 处理灯光方法 /// Light tempLight = new Light(); //发送数据收集 Dictionary commandDic = new Dictionary(); Scene scene; Action backAction; public LightSceneEditDialog(List functions,Scene inParScene,Action action) { lights = functions; scene = inParScene; backAction = action; } public void ShowDialog() { commandDic.Add(FunctionAttributeKey.OnOff, "off"); var hadDimming = lights.Find((obj) => obj.spk == SPK.LightDimming) != null; var hadCCT = lights.Find((obj) => obj.spk == SPK.LightCCT) != null; var hadRGB = lights.Find((obj) => obj.spk == SPK.LightRGB) != null; var bodyView = new FrameLayout(); this.AddChidren(bodyView); bodyView.MouseUpEventHandler = (sender, e) => { this.Close(); }; var contentView = new FrameLayout() { BackgroundColor = CSS_Color.MainBackgroundColor, Width = Application.GetRealWidth(343), Radius = (uint)Application.GetRealWidth(12), }; bodyView.AddChidren(contentView); #region 标题区 var titleView = new FrameLayout() { Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(52), }; contentView.AddChidren(titleView); var btnTitle = new Button() { Height = Application.GetRealHeight(52), Gravity = Gravity.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.MainColor, TextID = StringId.CombinedDimming, TextAlignment = TextAlignment.Center, }; if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 { btnTitle.Width = Application.GetRealWidth(197); btnTitle.IsMoreLines = true; } else { btnTitle.Width = btnTitle.GetTextWidth()+ Application.GetRealWidth(10); btnTitle.IsMoreLines = false; } titleView.AddChidren(btnTitle); var btnEditIcon = new Button() { Width = Application.GetRealWidth(24), Height = Application.GetRealWidth(24), X = Application.GetRealWidth(12) + btnTitle.Right, Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Public/Edit.png", //SelectedImagePath = "Public/HookIcon.png" }; titleView.AddChidren(btnEditIcon); Action callBack = (str) => { //名称不能为空 if (string.IsNullOrEmpty(str)) { new Tip() { CloseTime = 1, Text = Language.StringByID(StringId.NameCannotBeEmpty), Direction = AMPopTipDirection.None, }.Show(bodyView); return; } btnTitle.Text = str; scene.name = str; if (btnTitle.GetTextWidth() > Application.GetRealWidth(197))//247 { btnTitle.Width = Application.GetRealWidth(197); } else { btnTitle.Width = btnTitle.GetTextWidth(); } }; EventHandler eventHandler = (sender, e) => { List sceneNameList = new List(); foreach (var tempScene in FunctionList.List.scenes) { sceneNameList.Add(tempScene.name); } new PublicAssmebly().LoadDialog_EditParater(StringId.SceneName, scene.name, callBack, StringId.SceneNameCannotBeEmpty, StringId.SceneNameAlreadyExists, sceneNameList); }; btnTitle.MouseUpEventHandler = eventHandler; btnEditIcon.MouseUpEventHandler = eventHandler; titleView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor, Y = Application.GetRealHeight(51) }); #endregion //var dimmingLight = lights.Find((obj) => obj.spk == SPK.LightDimming); //var cctLight = lights.Find((obj) => obj.spk == SPK.LightCCT); //var rgbLight = lights.Find((obj) => obj.spk == SPK.LightRGB); var dimmingLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightDimming); var cctLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightCCT); var rgbLight = scene.functions.Find((obj) => obj.localFunction.spk == SPK.LightRGB); var brightnessValue = 0; var cctValue = 27; if(rgbLight!= null) { int.TryParse(rgbLight.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness).value, out brightnessValue); } if (cctLight != null) { int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness).value, out brightnessValue); int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out cctValue); } if(dimmingLight!=null) { int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out cctValue); } //属性设置区域 var attrView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(52), Width = Application.GetRealWidth(343), ScrollEnabled = false, }; //属性设置区域高度 int attrViewHight = Application.GetRealHeight(18 + 22); //只有继电器 if (!hadDimming && !hadCCT && !hadRGB) { attrViewHight += Application.GetRealHeight(50); attrView.Height = attrViewHight; contentView.AddChidren(attrView); attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); var view = new FrameLayout() { Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), }; attrView.AddChidren(view); var btnClose = new Button() { X = Application.GetRealWidth(50), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(98), Height = Application.GetRealHeight(40), TextColor = CSS_Color.TextualColor, SelectedBackgroundColor = CSS_Color.MainColor, SelectedTextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.DividingLineColor, TextID = StringId.OFF, TextSize = CSS_FontSize.TextFontSize, Radius = (uint)Application.GetRealWidth(5), IsSelected = true, //BorderWidth = 1, //BorderColor = 0x00000000 }; view.AddChidren(btnClose); var btnOpen = new Button() { X = Application.GetRealWidth(100 + 98), Gravity = Gravity.CenterVertical, Width = Application.GetRealWidth(98), Height = Application.GetRealHeight(40), TextColor = CSS_Color.TextualColor, SelectedBackgroundColor = CSS_Color.MainColor, SelectedTextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.DividingLineColor, TextID = StringId.On, TextSize = CSS_FontSize.TextFontSize, Radius = (uint)Application.GetRealWidth(5), }; view.AddChidren(btnOpen); btnClose.MouseUpEventHandler = (sender, e) => { btnClose.IsSelected = true; btnOpen.IsSelected = false; commandDic[FunctionAttributeKey.OnOff] = "off"; }; btnOpen.MouseUpEventHandler = (sender, e) => { btnClose.IsSelected = false; btnOpen.IsSelected = true; commandDic[FunctionAttributeKey.OnOff] = "on"; }; } else { if(hadRGB) { attrViewHight += Application.GetRealHeight(248); hadDimming = true; } if (hadCCT) { attrViewHight += Application.GetRealHeight(54 + 11); hadDimming = true; } if (hadDimming) { attrViewHight += Application.GetRealHeight(54 + 11); } attrView.Height = attrViewHight; contentView.AddChidren(attrView); attrView.AddChidren(new Button() { Height = Application.GetRealHeight(18) }); if (hadDimming) { LoadDimmingAttrView(attrView); } if (hadCCT) { LoadCctAttrView(attrView); } if(hadRGB) { LoadRgbAttrView(attrView); } } contentView.Height = Application.GetRealHeight(52 + 44) + attrViewHight; contentView.Gravity = Gravity.Center; #region bottom View var bottomView = new FrameLayout() { Y = Application.GetRealHeight(52) + attrViewHight, Height = Application.GetRealHeight(46), }; contentView.AddChidren(bottomView); bottomView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor }); var btnSave = new Button() { Width = Application.GetRealWidth(172), Height = Application.GetRealHeight(44), TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.TextualColor, TextID = StringId.Save, }; bottomView.AddChidren(btnSave); var btnComplete = new Button() { X = Application.GetRealWidth(172), Width = Application.GetRealWidth(172), Height = Application.GetRealHeight(46), BackgroundColor = CSS_Color.MainColor, TextColor = CSS_Color.MainBackgroundColor, TextAlignment = TextAlignment.Center, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Complete }; bottomView.AddChidren(btnComplete); //例:右下圆角 大小为50 int mRectCornerID = HDLUtils.RectCornerBottomRight; btnComplete.SetCornerWithSameRadius((uint)Application.GetRealWidth(14), mRectCornerID); btnComplete.MouseUpEventHandler = (sender, e) => { this.Close(); var waitPage = new Loading(); MainPage.BaseView.AddChidren(waitPage); waitPage.Start(Language.StringByID(StringId.PleaseWait)); new Thread(() => { try { foreach (var light in lights) { Dictionary sendDate = new Dictionary(); //赋值场景功能数据 foreach (var attr in light.GetAttributes()) { if (commandDic.ContainsKey(attr)) { try { sendDate.Add(attr, commandDic[attr]); } catch { } } } Control.Ins.SendWriteCommand(light, sendDate); Thread.Sleep(50); } } catch { } finally { Application.RunOnMainThread(() => { waitPage.Hide(); if (waitPage != null) { backAction(null); waitPage.RemoveFromParent(); } }); } }) { IsBackground = true }.Start(); }; btnSave.MouseUpEventHandler += (sender, e) => { if (string.IsNullOrEmpty(scene.name)) { new Tip() { CloseTime = 1, Text = Language.StringByID(StringId.SceneNameCannotBeEmpty), Direction = AMPopTipDirection.None, }.Show(bodyView); return; } foreach (var tempRoom in FunctionList.List.scenes) { if (scene.name == tempRoom.name) { new PublicAssmebly().TipMsg(StringId.Tip, StringId.SceneNameAlreadyExists); return; } } var waitPage = new Loading(); MainPage.BaseView.AddChidren(waitPage); waitPage.Start(Language.StringByID(StringId.PleaseWait)); new Thread(() => { try { var serverScene = new Scene(); for (int i = 0; i < lights.Count; i++) { var light = lights[i]; //赋值场景功能数据 foreach (var attr in light.GetAttributes()) { if (commandDic.ContainsKey(attr)) { try { light.SetAttrState(attr, commandDic[attr]); } catch { } } } //转换场景的功能对象 var sceneFunction = light.ConvertSceneFunction(); //查询有没有存在 var temp = scene.functions.Find((obj) => obj.sid == sceneFunction.sid); //赋值 if (temp != null) { temp = sceneFunction; } else { scene.functions.Add(sceneFunction); } } var result = FunctionList.List.AddScene(scene, out serverScene); Application.RunOnMainThread(() => { if (result == StateCode.SUCCESS) { scene = serverScene; FunctionList.List.scenes.Add(scene); backAction(scene); this.Close(); } else { IMessageCommon.Current.ShowErrorInfoAlter(result); } }); } catch { } finally { Application.RunOnMainThread(() => { waitPage.Hide(); waitPage.RemoveFromParent(); }); } }) { IsBackground = true, Priority = ThreadPriority.AboveNormal }.Start(); }; #endregion this.Show(); } /// /// 加载调光属性设置控件 /// /// void LoadDimmingAttrView(VerticalScrolViewLayout attrView) { commandDic.TryAdd(FunctionAttributeKey.Percent, "0"); var dimmingView = new FrameLayout() { Height = Application.GetRealHeight(54 + 11) }; attrView.AddChidren(dimmingView); #region 亮度调节 var btnBrightnessText = new Button() { X = Application.GetRealWidth(35), Y = Application.GetRealHeight(1), Width = Application.GetRealWidth(224), Height = Application.GetRealHeight(25), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextID = StringId.Brightness, }; btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + commandDic[FunctionAttributeKey.Percent] + "%"; dimmingView.AddChidren(btnBrightnessText); var btnMinValuesText = new Button() { X = Application.GetRealWidth(35), Y = btnBrightnessText.Bottom, Width = Application.GetRealWidth(40), Height = Application.GetRealHeight(21), Text = "0%", TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; dimmingView.AddChidren(btnMinValuesText); var dimmerBar = new DiyImageSeekBar() { X = Application.GetRealWidth(45 + 10), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), SeekBarViewHeight = Application.GetRealHeight(8), ThumbImagePath = "Public/ThumbImage.png", ThumbImageHeight = Application.GetRealHeight(54), ProgressTextColor = CSS_Color.FirstLevelTitleColor, ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel, ProgressBarColor = CSS_Color.AuxiliaryColor1, MaxValue = 100, Progress = Convert.ToInt32(commandDic[FunctionAttributeKey.Percent]), SeekBarPadding = Application.GetRealWidth(20), IsProgressTextShow = false, ProgressChangeDelayTime = 0, }; dimmingView.AddChidren(dimmerBar); dimmerBar.OnProgressChangedEvent = (sender, e) => { btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; }; dimmerBar.OnStopTrackingTouchEvent = (sender, e) => { commandDic[FunctionAttributeKey.Percent] = dimmerBar.Progress.ToString(); btnBrightnessText.Text = Language.StringByID(StringId.Brightness) + " " + e + "%"; }; var btnMaxValuesText = new Button() { X = dimmerBar.Right, Y = btnBrightnessText.Bottom, Width = Application.GetRealWidth(55), Height = Application.GetRealHeight(21), Text = "100%", TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, }; dimmingView.AddChidren(btnMaxValuesText); #endregion } /// /// 加载cct属性设置控件 /// /// void LoadCctAttrView(VerticalScrolViewLayout attrView) { #region 色温 var cctView = new FrameLayout() { Height = Application.GetRealHeight(54 + 11) }; attrView.AddChidren(cctView); //色温 var btnTempClolor = new Button(); btnTempClolor.X = Application.GetRealWidth(35); btnTempClolor.Y = Application.GetRealHeight(1); btnTempClolor.Width = Application.GetRealWidth(224); btnTempClolor.Height = Application.GetRealHeight(21); btnTempClolor.TextAlignment = TextAlignment.CenterLeft; btnTempClolor.TextColor = CSS_Color.FirstLevelTitleColor; btnTempClolor.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; btnTempClolor.TextID = StringId.ColorTemperature; cctView.AddChidren(btnTempClolor); //2700K var btnTempClolorMin = new Button() { X = Application.GetRealWidth(35), Y = btnTempClolor.Bottom, Width = Application.GetRealWidth(40), Height = Application.GetRealHeight(21), }; btnTempClolorMin.Width = Application.GetRealWidth(54); btnTempClolorMin.Height = Application.GetRealHeight(21); btnTempClolorMin.Text = "2700K"; btnTempClolorMin.TextAlignment = TextAlignment.CenterLeft; btnTempClolorMin.TextColor = CSS_Color.PromptingColor1; btnTempClolorMin.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; cctView.AddChidren(btnTempClolorMin); //滑动条的背景图片 var btnColorTemplatrueBack = new Button() { X = Application.GetRealWidth(55 + 22 + 15), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(180), Height = Application.GetRealHeight(54), }; btnColorTemplatrueBack.UnSelectedImagePath = "FunctionIcon/Light/ColorTemperatureBar.png"; btnColorTemplatrueBack.Height = Application.GetRealHeight(8); btnColorTemplatrueBack.Gravity = Gravity.CenterHorizontal; cctView.AddChidren(btnColorTemplatrueBack); //滑动条控件 var barColorTemplatrue = new CCTSeekBarControl() { X = Application.GetRealWidth(55 + 22), Y = Application.GetRealHeight(11), Width = Application.GetRealWidth(220), Height = Application.GetRealHeight(54), }; barColorTemplatrue.MinValue = 27; barColorTemplatrue.MaxValue = 65; barColorTemplatrue.ProgressBarColor = 0x00000000;//全部透明 barColorTemplatrue.ProgressBarUnEnableColor = 0x00000000; barColorTemplatrue.SeekBarBackgroundColor = 0x00000000; cctView.AddChidren(barColorTemplatrue); barColorTemplatrue.Y = btnTempClolorMin.Y - (barColorTemplatrue.Height - btnTempClolorMin.Height) / 2; var cct = 27; //int.TryParse(cctLight.status.Find((obj) => obj.key == FunctionAttributeKey.CCT).value, out cct); barColorTemplatrue.Progress = cct; //设置初始值 btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); barColorTemplatrue.OnProgressChangedEvent = (sender, e) => { btnTempClolor.Text = Language.StringByID(StringId.ColorTemperature) + " " + (barColorTemplatrue.Progress * 100 + "K"); }; barColorTemplatrue.OnStopTrackingTouchEvent = (sender, e) => { commandDic[FunctionAttributeKey.CCT] = (barColorTemplatrue.Progress*100).ToString(); }; //变更背景图的Y轴坐标 btnColorTemplatrueBack.Y = barColorTemplatrue.Y + (barColorTemplatrue.Height - btnColorTemplatrueBack.Height) / 2; //6500K var btnTempClolorMax = new Button(); btnTempClolorMax.Y = btnTempClolorMin.Y; btnTempClolorMax.X = barColorTemplatrue.Right - Application.GetRealWidth(30); btnTempClolorMax.Width = Application.GetRealWidth(54); btnTempClolorMax.Height = Application.GetRealHeight(21); btnTempClolorMax.Text = "6500K"; btnTempClolorMax.TextAlignment = TextAlignment.CenterRight; btnTempClolorMax.TextColor = CSS_Color.PromptingColor1; btnTempClolorMax.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; cctView.AddChidren(btnTempClolorMax); #endregion } /// /// 加载rgb属性设置控件 /// /// void LoadRgbAttrView(VerticalScrolViewLayout attrView) { #region RGB commandDic.TryAdd(FunctionAttributeKey.RGB, "255,255,255"); var rgbView = new FrameLayout() { Height = Application.GetRealHeight(248) }; attrView.AddChidren(rgbView); var btnCurColor = new Button() { X = Application.GetRealWidth(24), Y = Application.GetRealHeight(10), Width = Application.GetMinRealAverage(24), Height = Application.GetMinRealAverage(24), Radius = (uint)Application.GetMinRealAverage(8), BorderColor = CSS_Color.PromptingColor2, BorderWidth = 1, BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(commandDic[FunctionAttributeKey.RGB])) }; rgbView.AddChidren(btnCurColor); //色盘的桌布控件(限制那个白色滑动球使用) var framePickerBack = new FrameLayout(); framePickerBack.Gravity = Gravity.CenterHorizontal; framePickerBack.Y = Application.GetRealHeight(20); framePickerBack.Width = Application.GetMinRealAverage(198); framePickerBack.Height = Application.GetMinRealAverage(198); rgbView.AddChidren(framePickerBack); var colorPicker = new ColorPicker() { ColorImagePath = "FunctionIcon/Light/ColorWheel.png", }; framePickerBack.AddChidren(colorPicker); //白点控件 var btnWhiteRound = new Button(); btnWhiteRound.Width = Application.GetRealWidth(24); btnWhiteRound.Height = Application.GetRealWidth(24); btnWhiteRound.UnSelectedImagePath = "FunctionIcon/Light/ColorWheelTip.png"; btnWhiteRound.Visible = false; framePickerBack.AddChidren(btnWhiteRound); //当前点击的【点】是否正确 bool pointIsRight = false; //圆的半径(考虑边界,需要设置它的半径比较小一点) int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12); colorPicker.ColorChaged += (sender2, e2) => { string rgbString = (e2[0] + "," + e2[1] + "," + e2[2]).ToString(); commandDic[FunctionAttributeKey.RGB] = rgbString; btnCurColor.BackgroundColor = (uint)(0xFF000000 + tempLight.GetRGBcolor(rgbString)); }; colorPicker.MouseDownEventHandler += (sender, e) => { pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y); if (pointIsRight == false) { //点的区域不是圆盘内 return; } //显示白点 btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2; btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2; if (btnWhiteRound.Visible == false) { btnWhiteRound.Visible = true; } }; colorPicker.MouseMoveEventHandler += (sender, e) => { //当鼠标点下事件处理 colorPicker.MouseDownEventHandler(sender, e); }; #endregion } /// /// 检测点击点 /// /// 圆的半径 /// 圆心X轴 /// 圆心Y轴 /// 点击点的X轴 /// 点击点的Y轴 /// private bool CheckPoint(int circleR, int circleX, int circleY, int pointX, int pointY) { int dwidth = circleX - pointX; if (dwidth < 0) { dwidth *= -1; } int dHeight = circleY - pointY; if (dHeight < 0) { dHeight *= -1; } //根据三角函数,求三角形的斜边长 int dlength = dwidth * dwidth + dHeight * dHeight; //半径长度(不开方,所以是按平方算) circleR *= circleR; if (dlength < circleR) { //如果组成的三角形并没有长过半径,则代表还在圆内(不允许点边界) return true; } return false; } } }