using System; using HDL_ON.DriverLayer; using HDL_ON.Entity; using Shared; namespace HDL_ON.UI { public partial class RGBPage { /// /// 更新功能状态 /// public static void UpdataStates(Light uFunction) { Application.RunOnMainThread((Action)(() => { try { if (bodyView == null) return; if (uFunction.spk == bodyView.light.spk && uFunction.sid == bodyView.light.sid) { if (uFunction.trait_on_off.curValue.ToString() == "on") { //解决部分安卓手机,刷新图片时会变小问题 if (bodyView.colorPicker.ColorImagePath != "FunctionIcon/Light/ColorWheel.png") { bodyView.colorPicker.ColorImagePath = "FunctionIcon/Light/ColorWheel.png"; } bodyView.dimmerBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1; bodyView.btnSwitch.IsSelected = true; if (!bodyView.onDimmerBar) { bodyView.dimmerBar.Progress = uFunction.brightness; } } //状态一样时,不再刷新视图 else if (uFunction.trait_on_off.curValue.ToString() == "off" && bodyView.btnSwitch.IsSelected == true) { //解决部分安卓手机,刷新图片时会变小问题 if (bodyView.colorPicker.ColorImagePath != "FunctionIcon/Light/ColorWheelGray.png") { bodyView.colorPicker.ColorImagePath = "FunctionIcon/Light/ColorWheelGray.png"; } //bodyView.colorPicker.ColorImagePath = "FunctionIcon/Light/ColorWheelGray.png"; bodyView.dimmerBar.ProgressBarColor = CSS.CSS_Color.PromptingColor2; bodyView.btnSwitch.IsSelected = false; //色盘的圆点隐藏 bodyView.btnWhiteRound.Visible = false; } bodyView.btnCurColor.BackgroundColor = (uint)(0xFF000000 + bodyView.light.GetRGBcolor()); if (bodyView.light.GetRGBcolor() == 16777215 && bodyView.btnCurColor.BorderColor != 0x00000000) { bodyView.btnCurColor.BorderColor = CSS.CSS_Color.PromptingColor2; } else { bodyView.btnCurColor.BorderColor = 0x00000000; } } } catch (Exception ex) { MainPage.Log($"{bodyView.GetType().Name } UpdataStates error : {ex.Message}"); } })); } void LoadEventList() { LoadColorChangeEvent(); LoadCollectionEvent(); LoadSwitchEvent(); LoadEvent_BackCenterColor(); LoadEvent_DimmerBar(); LoadEvet_ChangeFadeTime(); //回退刷新信息事件 actionRefresh = () => { btnFunctionName.Text = btnFunctionName_Out.Text = light.name; btnFromFloor_Out.Text = btnFromFoorAndRoom.Text = light.GetRoomListName(); }; } /// /// 颜色变化事件 /// void LoadColorChangeEvent() { DateTime colorChangeTime = DateTime.MinValue; //当前点击的【点】是否正确 bool pointIsRight = false; //圆的半径(考虑边界,需要设置它的半径比较小一点) int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12); colorPicker.ColorChaged += (sender2, e2) => { if (light.trait_on_off.curValue.ToString() == "off" || pointIsRight == false) { //pointIsRight:点的区域不是圆盘内 return; } if ((DateTime.Now - colorChangeTime).TotalMilliseconds > 200) { light.SetRGBcolor(e2); colorChangeTime = DateTime.Now; btnCurColor.BackgroundColor = (uint)(0xFF000000 + light.GetRGBcolor()); System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.RGB, light.GetRGBcolorString()); Control.Ins.SendWriteCommand(light, d); } }; colorPicker.MouseDownEventHandler += (sender, e) => { if (light.trait_on_off.curValue.ToString() == "off") { return; } 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); }; } /// /// 收藏功能按钮事件 /// void LoadCollectionEvent() { btnCollection.MouseUpEventHandler += (sender, e) => { btnCollection.IsSelected = light.collect = btnCollection_Out.IsSelected = !btnCollection.IsSelected; light.CollectFunction(); }; } /// /// 灯光调光事件 /// void LoadEvent_DimmerBar() { dimmerBar.OnStartTrackingTouchEvent = (sender, e)=>{ onDimmerBar = true; }; dimmerBar.OnStopTrackingTouchEvent = (sender, e) => { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(200); onDimmerBar = false; }) { IsBackground = true }.Start(); light.brightness = dimmerBar.Progress; System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.Brightness, light.brightness.ToString()); Control.Ins.SendWriteCommand(light, d); light.fadeTime = barFadeTime.Progress; }; dimmerBar.OnProgressChangedEvent = (sender, e) => { //light.fadeTime = 0; //if (!btnSwitch.IsSelected) //{ // dimmerBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1; //} //btnSwitch.IsSelected = e > 0 ? true : false; //light.brightness = e; //light.trait_on_off.curValue = e > 0 ? "on" : "off"; //if (e == 0 || e == 100) //{ // System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); // d.Add(FunctionAttributeKey.Brightness, light.brightness.ToString()); // Control.Ins.SendWriteCommand(light, d); //} //else //{ // if (200 < (DateTime.Now - light.refreshTime).TotalMilliseconds) // { // light.refreshTime = DateTime.Now; // new System.Threading.Thread(() => // { // //Control.Send(CommandType_A.write, light); // System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); // d.Add(FunctionAttributeKey.Brightness, light.brightness.ToString()); // Control.Ins.SendWriteCommand(light, d); // }) // { IsBackground = true }.Start(); // } // else // { // MainPage.Log("skip dimmer control!!"); // } //} }; } /// /// 修改灯光渐变时间 /// void LoadEvet_ChangeFadeTime() { barFadeTime.OnStopTrackingTouchEvent = (sender, e) => { light.fadeTime = barFadeTime.Progress; light.UpdataFuncitonInfo(); }; } /// /// 加载开关事件 /// void LoadSwitchEvent() { btnSwitch.MouseUpEventHandler += (sender, e) => { btnSwitch.IsSelected = !btnSwitch.IsSelected; dimmerBar.ProgressBarColor = btnSwitch.IsSelected ? CSS.CSS_Color.AuxiliaryColor1 : CSS.CSS_Color.PromptingColor2; bodyView.colorPicker.ColorImagePath = btnSwitch.IsSelected ? "FunctionIcon/Light/ColorWheel.png" : "FunctionIcon/Light/ColorWheelGray.png"; new System.Threading.Thread(() => { light.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off"; System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.OnOff, light.trait_on_off.curValue.ToString()); d.Add(FunctionAttributeKey.FadeTime, light.fadeTime.ToString()); if (btnSwitch.IsSelected) { if(light.lastBrightness == 0) { light.lastBrightness = 100; dimmerBar.Progress = 100; } d.Add(FunctionAttributeKey.Brightness, light.lastBrightness.ToString()); } else { light.lastBrightness = light.brightness; } Control.Ins.SendWriteCommand(light, d); }) { IsBackground = true }.Start(); }; } /// /// 恢复默认颜色 /// void LoadEvent_BackCenterColor() { btnRestoredPoint.MouseUpEventHandler = (sender, e) => { if(light.trait_on_off.curValue.ToString() == "off") { return; } btnWhiteRound.Visible = true; btnWhiteRound.Gravity = Gravity.Center; light.SetRGBcolor(new byte[] { 255, 255, 255 }); btnCurColor.BackgroundColor = 0xFFFFFFFF; btnCurColor.BorderColor = CSS.CSS_Color.PromptingColor2; System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.RGB, light.GetRGBcolorString()); Control.Ins.SendWriteCommand(light, d); }; } /// /// 检测点击点 /// /// 圆的半径 /// 圆心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; } } }