using System; using System.Collections.Generic; using HDL_ON.DAL.Server; using HDL_ON.Entity; using HDL_ON.Stan; using HDL_ON.UI.CSS; using Shared; namespace HDL_ON.UI { public class CacWeekHistoryPage : FrameLayout { CacWeekHistoryPage bodyView; HorizontalScrolViewLayout dateHorView; Function device; /// /// 数据显示类型 /// room_temp 温度 /// room_humidity 湿度 /// string showType; Dictionary dataDic = new Dictionary(); public CacWeekHistoryPage(Function device,string type) { bodyView = this; this.device = device; showType = type; BackgroundColor = CSS_Color.BackgroundColor; } public void InitView() { if (showType == "room_temp") { new TopViewDiv(bodyView, Language.StringByID(StringId.Temp)).LoadTopView(); } else { new TopViewDiv(bodyView, Language.StringByID(StringId.Humidity)).LoadTopView(); } InitContentView(); } private void InitContentView() { FrameLayout contentView = new FrameLayout() { Y = Application.GetRealHeight(80), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(482), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(5) }; bodyView.AddChidren(contentView); Button btnTitle = new Button() { Height = Application.GetRealHeight(60), TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, TextAlignment = TextAlignment.Center, }; if (showType == "room_temp") { btnTitle.Text = "最近7天每天平均室内温度统计图"; } else { btnTitle.Text = "最近7天每天平均室内湿度统计图"; } contentView.AddChidren(btnTitle); FrameLayout dataView = new FrameLayout() { Y = Application.GetRealHeight(39), Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(293), Height = Application.GetRealHeight(345 + 30), }; contentView.AddChidren(dataView); Button btnUnit = new Button() { Height = Application.GetRealHeight(15 + 30), TextAlignment = TextAlignment.CenterLeft, TextColor = 0xFF43425D, TextSize = 8, }; if (showType == "room_temp") { btnUnit.Text = Language.StringByID(StringId.Uint) + ":℃"; } else { btnUnit.Text = Language.StringByID(StringId.Uint) + "%"; } dataView.AddChidren(btnUnit); #if DEBUG //dataDic.Add("0201", 49); //dataDic.Add("0202", 20); //dataDic.Add("0203", 10); //dataDic.Add("0204", 49); //dataDic.Add("0205", 20); //dataDic.Add("0206", 20); //dataDic.Add("0207", 48); //dataDic.Add("0201", -20); //dataDic.Add("0202", -20); //dataDic.Add("0203", -20); //dataDic.Add("0204", -48); //dataDic.Add("0205", -20); //dataDic.Add("0206", -20); //dataDic.Add("0207", -20); #endif DataItemView dataShowView = new DataItemView("0",360); //dataShowView.Height = Application.GetRealHeight(360); dataShowView.Y = Application.GetRealHeight(30); List items = new List() { "100","90","80","70","60","50","40","30","20","10","0" }; if (showType == "room_temp") { items = new List() { "50","40","30","20","10","0","-10","-20","-30","-40","-50" }; } int index = 0; foreach (var item in items) { DataItemView dataItemView; if (item == "0" ) { dataItemView = dataShowView; index++; } else { dataItemView = new DataItemView(item,30); dataItemView.Y = ++index * Application.GetRealHeight(30) + Application.GetRealHeight(15); } dataItemView.InitView(showType == "room_temp"); dataView.AddChidren(dataItemView); } dateHorView = new HorizontalScrolViewLayout() { X = Application.GetRealWidth(48), Y = dataView.Bottom,// - Application.GetRealHeight(19), Width = Application.GetRealWidth(267), Height = Application.GetRealHeight(26), }; contentView.AddChidren(dateHorView); Button btnTip = new Button() { Y = contentView.Bottom + Application.GetRealHeight(28), Height = Application.GetRealHeight(20), TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel, TextAlignment = TextAlignment.Center, Text = "*可通过点击柱形图查看当天24小时温度统计" }; bodyView.AddChidren(btnTip); new System.Threading.Thread(() => { var revertObj = new HttpServerRequest().GetSensorHistory("week", device.deviceId, showType); if (revertObj.Code == StateCode.SUCCESS) { var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject>(revertObj.Data.ToString()); foreach (var reObj in revertData) { double value = 0; try { value = Convert.ToDouble(reObj.fieldValue); } catch { } dataDic.Add(reObj.time, value); } Application.RunOnMainThread(() => { RefrshDataView(dataDic, dataShowView); RefreshXtext(); }); } }) { IsBackground = true }.Start(); } void RefreshXtext() { dateHorView.RemoveAll(); foreach (var dic in dataDic) { FrameLayout dateView = new FrameLayout() { Width = Application.GetRealWidth(39), Height = Application.GetRealHeight(26), }; dateHorView.AddChidren(dateView); Button btnLineh = new Button() { Width = 1, Height = Application.GetRealHeight(4), Gravity = Gravity.CenterHorizontal, BackgroundColor = 0xFFDBDBDB }; dateView.AddChidren(btnLineh); Button btnDate = new Button() { Y = Application.GetRealHeight(12), Height = Application.GetRealHeight(14), TextColor = 0xFF43425D, TextSize = 10, Text = dic.Key, }; try { string[] strs = dic.Key.Split(@"/"); btnDate.Text = strs[1] + "/" + strs[2]; } catch { } dateView.AddChidren(btnDate); } } void RefrshDataView(Dictionary dataDic, FrameLayout dataShowView) { int valueIndex = 0; foreach (var data in dataDic) { ColumnarView cv = new ColumnarView(device.deviceId,showType, data.Key, data.Value); cv.X = Application.GetRealWidth(valueIndex * 38 + 25); cv.InitView(); dataShowView.AddChidren(cv); cv.Clicker(); valueIndex++; } } } class DataItemView : FrameLayout { string value; Button btnLine; int height; public DataItemView(string value,int height) { this.value = value; Width = Application.GetRealWidth(293); this.height = height; Height = Application.GetRealHeight(height); } public void InitView(bool isTemp) { Button btnValue = new Button() { Width = Application.GetRealWidth(18), Height = Application.GetRealHeight(30), TextAlignment = TextAlignment.CenterRight, TextColor = 0xFF43425D, TextSize = 8, Text = value }; AddChidren(btnValue); btnLine = new Button() { X = Application.GetRealWidth(26), Width = Application.GetRealWidth(267), Height = 1, BackgroundColor = CSS_Color.DividingLineColor, }; if (isTemp) { btnLine.Gravity = Gravity.CenterVertical; btnValue.Gravity = Gravity.CenterVertical; } else { if (height == 360) { btnValue.Y = Application.GetRealHeight(height - 45); } else { btnLine.Gravity = Gravity.CenterVertical; } btnLine.Y = Application.GetRealHeight(height - 30); } AddChidren(btnLine); } } class ColumnarView : VerticalScrolViewLayout { string functionId; string time; string type; double value; string valueText; /// /// 方向:向上、向下 /// bool isUpward; Button btnValue; Button btnValueText; public ColumnarView(string functionId,string type, string key, double value) { this.functionId = functionId; this.type = type; time = key; this.isUpward = value >= 0; valueText = value.ToString(); if (isUpward) { this.value = value; } else { this.value = value * -1; } Width = Application.GetRealWidth(39); Height = Application.GetRealHeight((int)(value * 3 + 30)); } public void InitView() { int yValue = 0; btnValue = new Button() { Gravity = Gravity.CenterHorizontal, Height = Application.GetRealHeight((int)(value * 3)), Width = Application.GetRealWidth(16), BackgroundColor = 0xFFFF9D54, }; btnValueText = new Button() { Height = Application.GetRealHeight(30), TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextColor = 0xFF43425D, Text = valueText, }; if(type == "room_temp") { btnValueText.Text += "℃"; if (isUpward) { yValue = (int)(150 - value * 3); yValue = yValue > 0 ? yValue : 0; Y = Application.GetRealHeight(yValue+1); AddChidren(btnValueText); AddChidren(btnValue); } else { Y = Application.GetRealHeight(180); AddChidren(btnValue); AddChidren(btnValueText); } } else { yValue = (int)(360 -30- 30 - value * 3); Y = Application.GetRealHeight(yValue+1); AddChidren(btnValueText); AddChidren(btnValue); btnValueText.Text += "%"; } } public void Clicker() { btnValue.MouseUpEventHandler = (sender, e) => { var page = new CacDayHistoryPage(functionId,type, time); MainPage.BasePageView.AddChidren(page); page.InitView(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; btnValueText.MouseUpEventHandler = (sender, e) => { var page = new CacDayHistoryPage(functionId,type, time); MainPage.BasePageView.AddChidren(page); page.InitView(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; } } }