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;
}
}
}