黄学彪
2020-12-17 9f326f4000847e6167d8166fa2f6a66f53cb3734
ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs
@@ -16,6 +16,10 @@
        #region ■ 变量声明___________________________
        /// <summary>
        /// The instance.
        /// </summary>
        public static HomeMainPageForm Instance;
        /// <summary>
        /// 整个界面的上下滑动控件
        /// </summary>
        private VerticalFrameControl listBodyContr = null;
@@ -49,8 +53,11 @@
        /// </summary>
        public void ShowForm()
        {
            this.FormID = "HomeMainPageForm";
            Instance = this;
            //先初始化左滑房间列表界面(在反射里面初始化)
            if (ListRoomViewFrom.Instance == null) { }
            if (LeftListRoomViewFrom.Instance == null) { }
            //整个背景的上下滑动控件
            if (this.listBodyContr == null)
@@ -75,8 +82,8 @@
            this.AddNormalDeviceReportEvent();
            //添加传感器状态上报事件
            this.AddSensorDeviceReportEvent();
            //将当前的画面保存到内存当中
            UserCenterLogic.AddActionForm(this);
            //开启传感器状态还原的线程
            this.StartRecoverSenorStatuThread();
        }
        /// <summary>
@@ -85,7 +92,7 @@
        private void InitTopFrameLayoutControl()
        {
            //头部容器
            base.topFrameLayout = new FrameLayout();
            base.topFrameLayout = new NormalFrameLayout();
            topFrameLayout.Y = Application.GetRealHeight(60);
            topFrameLayout.Height = Application.GetRealHeight(127);
            topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
@@ -93,7 +100,7 @@
            //楼层图标
            var btnFloorIcon = new IconViewControl(69);
            btnFloorIcon.X = ControlCommonResourse.XXLeft;
            btnFloorIcon.X = HdlControlResourse.XXLeft;
            btnFloorIcon.Gravity = Gravity.CenterVertical;
            btnFloorIcon.UnSelectedImagePath = "Item/Floor.png";
            topFrameLayout.AddChidren(btnFloorIcon);
@@ -124,8 +131,11 @@
                    this.ShowSelectFloorForm(btnFloorName);
                };
            }
            //可视对讲快捷方式
            Shared.Phone.Device.VideoIntercom.VideoMachine.AccountSupportVideo(topFrameLayout);
            //安防快捷方式
            if (UserCenterResourse.ResidenceOption.SafetyShortcut)
            if (HdlUserCenterResourse.ResidenceOption.SafetyShortcut)
            {
                var btnSafety = new Controls.SafetyShortcutControl();
                btnSafety.X = Application.GetRealWidth(860);
@@ -142,13 +152,13 @@
            //住宅名字
            var btnHouseName = new NormalViewControl(700, 95, true);
            btnHouseName.X = ControlCommonResourse.XXLeft;
            btnHouseName.X = HdlControlResourse.XXLeft;
            btnHouseName.Y = Application.GetRealHeight(161);
            btnHouseName.TextSize = 24;
            btnHouseName.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor;
            btnHouseName.IsBold = true;
            btnHouseName.Text = Config.Instance.Home.Name;
            btnHouseName.Width = btnHouseName.GetRealWidthByText();
            btnHouseName.Width = btnHouseName.GetRealWidthByText() + Application.GetRealWidth(100);
            this.listBodyContr.frameTable.AddChidren(btnHouseName);
            //切换住宅
@@ -161,11 +171,12 @@
                }
                else
                {
                    var selectHouse = new Device.Category.SelectHouse();
                    var selectHouse = new Category.SelectHouseForm();
                    selectHouse.Init();
                    selectHouse.HouseAction = (houseId) =>
                    {
                        ChangeResidence(House.GetHouseByHouseId(houseId));
                        //切换住宅
                        this.ChangeResidence(HdlResidenceLogic.Current.GetHouseByHouseId(houseId));
                    };
                }
            };
@@ -177,7 +188,7 @@
        private void InitMidFrameLayoutControl()
        {
            //成员身份不允许添加网关
            if (UserCenterResourse.UserInfo.AuthorityNo == 3)
            if (HdlUserCenterResourse.ResidenceOption.AuthorityNo == 3)
            {
                //初始化场景,功能的切换控件
                this.InitSceneFunctionSwitchControl();
@@ -187,7 +198,7 @@
            }
            //检测是否绑定有网关
            if (this.CheckHadBindGateway() == false)
            if (Common.Config.Instance.Home.IsVirtually == false && this.CheckHadBindGateway() == false)
            {
                //显示没有绑定过网关的界面
                this.ShowNoGatewayTip();
@@ -236,13 +247,13 @@
            btnFunction.TextID = R.MyInternationalizationString.Function;
            btnFunction.TextAlignment = TextAlignment.Center;
            functionSceneView.AddChidren(btnFunction);
            if (UserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 1)
            if (HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 1)
            {
                btnScene.IsSelected = true;
                btnScene.TextSize = 17;
                btnScene.IsBold = true;
            }
            else if (UserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 2)
            else if (HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 2)
            {
                btnFunction.IsSelected = true;
                btnFunction.TextSize = 17;
@@ -250,13 +261,10 @@
            }
            //功能和场景bodyView
            this.bodyFrameLayout = new FrameLayout()
            {
                Y = functionSceneView.Bottom,
                Height = Application.GetRealHeight(750),
                Gravity = Gravity.CenterHorizontal,
                BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
            };
            this.bodyFrameLayout = new NormalFrameLayout();
            bodyFrameLayout.Y = functionSceneView.Bottom;
            bodyFrameLayout.Height = this.listBodyContr.frameTable.Height - functionSceneView.Bottom;
            bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            this.listBodyContr.frameTable.AddChidren(bodyFrameLayout);
            //选择功能分栏
@@ -267,7 +275,7 @@
                    return;
                }
                //功能分支选择
                UserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex = 2;
                HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex = 2;
                btnScene.IsSelected = false;
                btnScene.TextSize = 15;
@@ -287,7 +295,7 @@
                    return;
                }
                //场景分支选择
                UserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex = 1;
                HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex = 1;
                btnScene.IsSelected = true;
                btnScene.TextSize = 17;
@@ -312,8 +320,8 @@
            bg.UnSelectedImagePath = "Item/NoBindGW.png";
            this.listBodyContr.frameTable.AddChidren(bg);
            var tip = new NormalViewControl(Application.GetMinRealAverage(717), Application.GetMinRealAverage(58), false);
            tip.Y = Application.GetRealHeight(815);
            var tip = new NormalViewControl(this.GetPictrueRealSize(717), this.GetPictrueRealSize(58), false);
            tip.Y = bg.Bottom + Application.GetRealHeight(35);
            tip.Gravity = Gravity.CenterHorizontal;
            tip.TextID = R.MyInternationalizationString.NewAccountNeedBingGW;
            tip.TextColor = ZigbeeColor.Current.GXCTextGrayColor;
@@ -321,13 +329,13 @@
            this.listBodyContr.frameTable.AddChidren(tip);
            var addBG = new PicViewControl(971, 366);
            addBG.Y = Application.GetRealHeight(1048);
            addBG.Y = tip.Bottom + Application.GetRealHeight(176);
            addBG.UnSelectedImagePath = "Item/VirtualFrame.png";
            addBG.Gravity = Gravity.CenterHorizontal;
            this.listBodyContr.frameTable.AddChidren(addBG);
            var addGatewayBtn = new IconViewControl(89);
            addGatewayBtn.Y = Application.GetRealHeight(1143);
            addGatewayBtn.Y = tip.Bottom + Application.GetRealHeight(271);
            addGatewayBtn.UnSelectedImagePath = "Item/Add_GW.png";
            addGatewayBtn.Gravity = Gravity.CenterHorizontal;
            this.listBodyContr.frameTable.AddChidren(addGatewayBtn);
@@ -338,7 +346,7 @@
            };
            var addTip = new PicViewControl(717, 58);
            addTip.Y = Application.GetRealHeight(1256);
            addTip.Y = addGatewayBtn.Bottom + Application.GetRealHeight(23);
            addTip.Gravity = Gravity.CenterHorizontal;
            addTip.TextID = R.MyInternationalizationString.AddSmartGW;
            addTip.TextColor = ZigbeeColor.Current.GXCTextBlackColor;
@@ -370,13 +378,13 @@
            //房间滑动控件左边的虚拟图片
            var mLeftImageView = new ImageView();
            mLeftImageView.ImagePath = "RoomIcon/1.jpg";
            mLeftImageView.ImagePath = "RoomIcon/19.jpg";
            mLeftImageView.Radius = (uint)Application.GetRealHeight(17);
            mLeftImageView.Width = Application.GetRealWidth(717);
            mLeftImageView.Height = Application.GetRealHeight(478);
            //房间滑动控件右边的虚拟图片
            var mRightImageView = new ImageView();
            mRightImageView.ImagePath = "RoomIcon/2.jpg";
            mRightImageView.ImagePath = "RoomIcon/19.jpg";
            mRightImageView.Radius = (uint)Application.GetRealHeight(17);
            mRightImageView.Width = mLeftImageView.Width;
            mRightImageView.Height = mLeftImageView.Height;
@@ -400,7 +408,11 @@
            roomPageView.SetLeftAndRightImageView(mLeftImageView, mRightImageView);
            //当前房间
            var listRoom = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom();
            var listRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
            if (HdlRoomLogic.Current.NowMainPageRoom == null)
            {
                HdlRoomLogic.Current.NowMainPageRoom = listRoom[0];
            }
            var curIndex = 0;
            for (int i = 0; i < listRoom.Count; i++)
            {
@@ -408,7 +420,7 @@
                roomPageView.AddChidren(roomView);
                roomView.Init(listRoom[i]);
                if (listRoom[i].Id == HdlRoomLogic.Current.CurrentRoom.Id)
                if (listRoom[i].Id == HdlRoomLogic.Current.NowMainPageRoom.Id)
                {
                    //当前房间,则显示那些数据出来
                    roomView.HideName(false);
@@ -428,7 +440,7 @@
            btnRoomLeftShadow.Gravity = Gravity.CenterVertical;
            btnRoomLeftShadow.BackgroundColor = 0x1c000000;
            btnRoomLeftShadow.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
            frameBack.AddChidren(btnRoomLeftShadow);
            //frameBack.AddChidren(btnRoomLeftShadow);//暂时不加遮罩
            //在房间卡片右边添加遮罩
            var btnRoomRightShadow = new FrameLayout();
@@ -438,7 +450,7 @@
            btnRoomRightShadow.Gravity = Gravity.CenterVertical;
            btnRoomRightShadow.BackgroundColor = btnRoomLeftShadow.BackgroundColor;
            btnRoomRightShadow.SetCornerWithSameRadius(Application.GetRealHeight(12), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerBottomLeft);
            frameBack.AddChidren(btnRoomRightShadow);
            //frameBack.AddChidren(btnRoomRightShadow);//暂时不加遮罩
            //控件开始滑动的事件
            roomPageView.StartScrollAction += () =>
@@ -473,20 +485,18 @@
                btnRoomRightShadow.Visible = true;
                btnRoomBottomShadow.Visible = true;
                //切换当前房间
                HdlRoomLogic.Current.CurrentRoom = listRoom[curIndex];
                HdlRoomLogic.Current.NowMainPageRoom = listRoom[curIndex];
                //刷新设备桌布控件
                this.isRoomChanging = false;
                this.RefreshBodyView();
            };
            //设置房间的初始选择
            roomPageView.PageIndex = curIndex;
#if iOS
            //Ios如果索引是第一个时,它触发不了事件,需要手动触发
            //如果索引是第一个时,它触发不了事件,需要手动触发
            if (curIndex == 0)
            {
                roomPageView.EndScrollAction();
            }
#endif
        }
        /// <summary>
@@ -500,7 +510,7 @@
                //当没有绑定有网关,左滑时,点击房间列表,则不鸟它
                return;
            }
            var listRoom = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom();
            var listRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
            for (int i = 0; i < listRoom.Count; i++)
            {
                if (room.Id == listRoom[i].Id)
@@ -516,7 +526,7 @@
            //重置一下楼层名字
            if (this.btnFloorName != null)
            {
                btnFloorName.Text = HdlResidenceLogic.Current.GetFloorNameById(Config.Instance.Home.CurrentFloorId);
                btnFloorName.Text = Config.Instance.Home.GetCurrentFloorName;
            }
        }
@@ -533,15 +543,15 @@
            bodyFrameLayout.RemoveAll();
            bodyFrameLayout.Height = Application.GetRealHeight(750);
            this.listBodyContr.RecoverTableHeight();
            this.dicSceneCardControl.Clear();
            this.dicDeviceCardControl.Clear();
            this.dicSceneCardControl = new Dictionary<int, Controls.SceneCardControl>();
            this.dicDeviceCardControl = new Dictionary<string, Controls.DeviceCardCommon>();
            var listDevice = new List<CommonDevice>();
            foreach (var mainkeys in HdlRoomLogic.Current.CurrentRoom.ListDevice)
            foreach (var mainkeys in HdlRoomLogic.Current.NowMainPageRoom.ListDevice)
            {
                var device = LocalDevice.Current.GetDevice(mainkeys);
                var device = HdlDeviceCommonLogic.Current.GetDevice(mainkeys);
                //判断该设备能否显示在主页
                if (LocalDevice.Current.CanShowInHomeHomeMainPage(device) == false)
                if (HdlDeviceCommonLogic.Current.CanShowInHomeHomeMainPage(device) == false)
                {
                    continue;
                }
@@ -551,7 +561,8 @@
            //当前房间的设备数
            if (listDevice.Count == 0)
            {
                ShowNoFunctionTip();
                //还没有功能哦
                this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.NoFunction_Tip));
                return;
            }
            //设备列表容器控件
@@ -575,7 +586,7 @@
            //设备计数
            int contrCount = 0;
            //X轴坐标(图片左边有余白)
            int XX = Application.GetMinRealAverage(44);
            int XX = this.GetPictrueRealSize(44);
            //Y轴坐标
            int YY = 0;
            var listContr = new List<Controls.DeviceCardCommon>();
@@ -609,6 +620,16 @@
                    {
                        cardContr = new Controls.DeviceAcCardControl();
                    }
                    //新风
                    else if (device.Type == DeviceType.FreshAir)
                    {
                        cardContr = new Controls.DeviceFreshAirCardControl();
                    }
                    // PM2.5
                    else if (device.Type == DeviceType.PMSensor)
                    {
                        cardContr = new Controls.DevicePmSensorCardControl();
                    }
                    //彩灯(调光器)
                    else if (device.Type == DeviceType.DimmableLight)
                    {
@@ -629,6 +650,11 @@
                    {
                        cardContr = new Controls.DeviceDoorLockCardControl();
                    }
                    //色温灯
                    else if (device.Type == DeviceType.ColorTemperatureLight)
                    {
                        cardContr = new Controls.DeviceColorTemperatureCardControl();
                    }
                    //无法识别
                    else
                    {
@@ -639,24 +665,24 @@
                    cardContr.X = XX;
                    cardContr.Y = YY;
                    listDeviceBackContr.AddChidren(cardContr);
                    cardContr.InitControl(device);
                    cardContr.InitControl(device, HdlRoomLogic.Current.NowMainPageRoom);
                    //卡片需要被移除的事件
                    cardContr.CardNeedRemoveEvent += () =>
                    {
                        //重置设备卡片控件坐标(卡片需要被删除专用)
                        this.ResetDeviceCardControlLocation(LocalDevice.Current.GetDeviceMainKeys(device));
                        this.ResetDeviceCardControlLocation(HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device));
                    };
                    //设备计数
                    contrCount++;
                    //卡片左右两边有14的余白,每两个后,X轴重置
                    XX = contrCount % 2 == 0 ? Application.GetMinRealAverage(44) : cardContr.Right + Application.GetMinRealAverage(20);
                    XX = contrCount % 2 == 0 ? this.GetPictrueRealSize(44) : cardContr.Right + this.GetPictrueRealSize(20);
                    if (contrCount % 2 == 0)
                    {
                        //没两个之后,Y轴递增
                        YY = cardContr.Bottom + Application.GetMinRealAverage(15);
                        YY = cardContr.Bottom + this.GetPictrueRealSize(15);
                    }
                    //控件记录到缓存中
                    this.dicDeviceCardControl[LocalDevice.Current.GetDeviceMainKeys(device)] = cardContr;
                    this.dicDeviceCardControl[HdlDeviceCommonLogic.Current.GetDeviceMainKeys(device)] = cardContr;
                    //加缓存,然后发命令
                    listContr.Add(cardContr);
@@ -671,50 +697,40 @@
                        }
                        HdlThreadLogic.Current.RunThread(() =>
                        {
                            for (int i = 0; i < listContr.Count; i++)
                            while (listDeviceBackContr.Parent != null)
                            {
                                if (listDeviceBackContr.Parent == null)
                                bool hadSend = false;
                                for (int i = 0; i < listContr.Count; i++)
                                {
                                    return;
                                    if (listDeviceBackContr.Parent == null)
                                    {
                                        return;
                                    }
                                    //如果还没有接收到数据,则再次发送
                                    if (listContr[i].ReceiveResponeResultStatu() == false)
                                    {
                                        //发送获取状态的命令
                                        listContr[i].SendStatuComand();
                                        hadSend = true;
                                        System.Threading.Thread.Sleep(200);
                                    }
                                }
                                System.Threading.Thread.Sleep(200);
                                //发送获取状态的命令
                                listContr[i].SendStatuComand();
                                if (hadSend == false)
                                {
                                    //如果已经全部回路都接收了网关回复,则不再二次发送
                                    break;
                                }
                                System.Threading.Thread.Sleep(2000);
                            }
                        }, ShowErrorMode.NO);
                    }
                });
                System.Threading.Thread.Sleep(50);
                if (contrCount > 6)
                {
                    //让它呈现一种直接一次性刷出来的效果
                    System.Threading.Thread.Sleep(50);
                }
            }
        }
        /// <summary>
        /// 显示没有功能
        /// </summary>
        private void ShowNoFunctionTip()
        {
            var noFunction = new Button
            {
                Y = Application.GetRealHeight(69),
                Width = Application.GetMinRealAverage(683),
                Height = Application.GetMinRealAverage(392),
                Gravity = Gravity.CenterHorizontal,
                UnSelectedImagePath = "Item/NoFunction.png"
            };
            bodyFrameLayout.AddChidren(noFunction);
            var noFunctionTip = new Button()
            {
                Y = noFunction.Bottom,
                Height = Application.GetRealHeight(200),
                Text = Language.StringByID(R.MyInternationalizationString.NoFunction_Tip).Replace("{\\r\\n}", "\r\n"),
                TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
                TextAlignment = TextAlignment.Center,
                IsMoreLines = true
            };
            bodyFrameLayout.AddChidren(noFunctionTip);
        }
        #endregion
@@ -754,12 +770,12 @@
                if (contrCount % 2 == 1)
                {
                    //第一个固定44
                    XX = Application.GetMinRealAverage(44);
                    XX = this.GetPictrueRealSize(44);
                }
                else
                {
                    //第二个是44+控件宽度+20余白
                    XX = Application.GetMinRealAverage(44) + this.dicDeviceCardControl[mainkey].Width + Application.GetMinRealAverage(20);
                    XX = this.GetPictrueRealSize(44) + this.dicDeviceCardControl[mainkey].Width + this.GetPictrueRealSize(20);
                }
                //每两个之后,并且是第一个的时候,Y轴递增
@@ -768,7 +784,7 @@
                    //求商
                    int value = contrCount / 2;
                    //控件的底部有15的间隔
                    YY = value * (this.dicDeviceCardControl[mainkey].Height + Application.GetMinRealAverage(15));
                    YY = value * (this.dicDeviceCardControl[mainkey].Height + this.GetPictrueRealSize(15));
                }
                if (canMove == true)
                {
@@ -806,11 +822,11 @@
            bodyFrameLayout.RemoveAll();
            bodyFrameLayout.Height = Application.GetRealHeight(750);
            this.listBodyContr.RecoverTableHeight();
            this.dicSceneCardControl.Clear();
            this.dicDeviceCardControl.Clear();
            this.dicSceneCardControl = new Dictionary<int, Controls.SceneCardControl>();
            this.dicDeviceCardControl = new Dictionary<string, Controls.DeviceCardCommon>();
            var listScene = new List<SceneUI>();
            foreach (int sceneId in HdlRoomLogic.Current.CurrentRoom.ListSceneId)
            foreach (int sceneId in HdlRoomLogic.Current.NowMainPageRoom.ListSceneId)
            {
                var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId);
                if (sceneUi == null)
@@ -823,8 +839,8 @@
            if (listScene.Count == 0)
            {
                //显示没场景
                this.ShowNoSceneTip();
                //还没有场景哦
                this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.NoScene_Tip));
                return;
            }
            //列表控件
@@ -834,7 +850,7 @@
            HdlThreadLogic.Current.RunThread(() =>
            {
                //初始化设备卡片列表控件
                //初始化场景卡片列表控件
                this.InitSceneListCardControl(listSceneBackContr, listScene);
            });
        }
@@ -848,7 +864,7 @@
            //场景计数
            int contrCount = 0;
            //X轴坐标(图片左边有余白)
            int XX = Application.GetMinRealAverage(44);
            int XX = this.GetPictrueRealSize(44);
            //Y轴坐标
            int YY = 0;
            foreach (var sceneUi in listScene)
@@ -875,11 +891,11 @@
                    //设备计数
                    contrCount++;
                    //每两个后,X轴重置
                    XX = contrCount % 2 == 0 ? Application.GetMinRealAverage(44) : cardContr.Right + Application.GetMinRealAverage(20);
                    XX = contrCount % 2 == 0 ? this.GetPictrueRealSize(44) : cardContr.Right + this.GetPictrueRealSize(20);
                    if (contrCount % 2 == 0)
                    {
                        //没两个之后,Y轴递增
                        YY = cardContr.Bottom + Application.GetMinRealAverage(15);
                        YY = cardContr.Bottom + this.GetPictrueRealSize(15);
                    }
                    //控件记录到缓存中
                    this.dicSceneCardControl[sceneUi.Id] = cardContr;
@@ -900,34 +916,12 @@
                        });
                    }
                });
                System.Threading.Thread.Sleep(50);
                if (contrCount > 6)
                {
                    //让它呈现一种一次性显示出来的效果
                    System.Threading.Thread.Sleep(50);
                }
            }
        }
        /// <summary>
        /// 显示没场景
        /// </summary>
        private void ShowNoSceneTip()
        {
            var noScene = new Button
            {
                Y = Application.GetRealHeight(69),
                Width = Application.GetMinRealAverage(683),
                Height = Application.GetMinRealAverage(392),
                Gravity = Gravity.CenterHorizontal,
                UnSelectedImagePath = "Item/NoFunction.png"
            };
            bodyFrameLayout.AddChidren(noScene);
            var noScenceTip = new Button()
            {
                Y = noScene.Bottom,
                Height = Application.GetRealHeight(200),
                Text = Language.StringByID(R.MyInternationalizationString.NoScene_Tip).Replace("{\\r\\n}", "\r\n"),
                TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
                TextAlignment = TextAlignment.Center,
                IsMoreLines = true
            };
            bodyFrameLayout.AddChidren(noScenceTip);
        }
        /// <summary>
@@ -1010,12 +1004,12 @@
                if (contrCount % 2 == 1)
                {
                    //第一个固定44
                    XX = Application.GetMinRealAverage(44);
                    XX = this.GetPictrueRealSize(44);
                }
                else
                {
                    //第二个是44+控件宽度+20余白
                    XX = Application.GetMinRealAverage(44) + this.dicSceneCardControl[sceneId].Width + Application.GetMinRealAverage(20);
                    XX = this.GetPictrueRealSize(44) + this.dicSceneCardControl[sceneId].Width + this.GetPictrueRealSize(20);
                }
                //每两个之后,并且是第一个时,Y轴递增
@@ -1024,7 +1018,7 @@
                    //求商
                    int value = contrCount / 2;
                    //控件的底部有15的间隔
                    YY = value * (this.dicSceneCardControl[sceneId].Height + Application.GetMinRealAverage(15));
                    YY = value * (this.dicSceneCardControl[sceneId].Height + this.GetPictrueRealSize(15));
                }
                if (canMove == true)
                {
@@ -1063,7 +1057,7 @@
            //让界面别闪烁
            HdlThreadLogic.Current.RunMainInThread(() =>
            {
                if (UserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 2)
                if (HdlUserCenterResourse.ResidenceOption.HomeMainPageSwitchIndex == 2)
                {
                    //功能
                    this.ShowFunction();
@@ -1085,36 +1079,23 @@
        /// <param name="home">Home.</param>
        private void ChangeResidence(House home)
        {
            try
            HdlThreadLogic.Current.RunThread(() =>
            {
                CommonPage.Loading.Start();
                new System.Threading.Thread(async () =>
                {
                    Config.Instance.HomeId = home.Id;
                    Config.Instance.Home = House.GetHouseByFilePath(home.FileName);
                    Global.CreateHomeDirectory(home.Id);
                    Config.Instance.Save();
                    //刷新个人中心的内存及线程
                    await UserCenterLogic.InitUserCenterMenmoryAndThread();
                    //初始化全部房间
                    HdlRoomLogic.Current.InitAllRoom();
                this.ShowProgressBar();
                    Application.RunOnMainThread(() =>
                    {
                        ShowForm();
                        CommonPage.Loading.Hide();
                    });
                })
                { IsBackground = true }.Start();
            }
            catch (Exception ex)
            {
                Application.RunOnMainThread(() =>
                //切换住宅
                var result = HdlResidenceLogic.Current.SwitchResidence(home.Id);
                HdlThreadLogic.Current.RunMain(() =>
                {
                    CommonPage.Loading.Hide();
                    Console.WriteLine(ex.Message);
                    if (result == true)
                    {
                        //刷新界面
                        this.ShowForm();
                    }
                    this.CloseProgressBar();
                });
            }
            });
        }
        #endregion
@@ -1132,17 +1113,24 @@
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //处理一般设备的上报数据
                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
                    string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(report);
                    if (this.dicDeviceCardControl.ContainsKey(mainKeys) == true)
                    {
                        //刷新卡片信息
                        var locadevice = LocalDevice.Current.GetDevice(mainKeys);
                        if (report.DeviceStatusReport.CluterID == 513 && report.DeviceStatusReport.AttriBute[0].AttributeId == 28)
                        var locadevice = HdlDeviceCommonLogic.Current.GetDevice(mainKeys);
                        //已经接收到网关的反馈 2020.05.09:删除Ack主题
                        this.dicDeviceCardControl[mainKeys].SetHadGetResponeResultStatu();
                        //刷新控件
                        if (locadevice.Type != DeviceType.IASZone)
                        {
                            //空调是特殊的,它的开关是属性上报来着.已经接收到网关的反馈
                            this.dicDeviceCardControl[mainKeys].SetHadGetResponeResultStatu();
                            //传感器不需要属性上报(但是那个球型传感器居然会属性上报)
                            this.dicDeviceCardControl[mainKeys].RefreshControlInfo(locadevice);
                        }
                        this.dicDeviceCardControl[mainKeys].RefreshControlInfo(locadevice);
                        else if (report.DeviceStatusReport.CluterID == 1)
                        {
                            //这个是电量推送
                            this.dicDeviceCardControl[mainKeys].RefreshBatteryStatu();
                        }
                    }
                }, ShowErrorMode.NO);
            });
@@ -1152,29 +1140,13 @@
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
                    string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(report);
                    if (this.dicDeviceCardControl.ContainsKey(mainKeys) == true)
                    {
                        //刷新卡片状态
                        this.dicDeviceCardControl[mainKeys].SetCardOnlineStatu(report.IsOnline == 1);
                        bool bolOnline = HdlDeviceCommonLogic.Current.CheckDeviceIsOnline(report);
                        this.dicDeviceCardControl[mainKeys].SetCardOnlineStatu(bolOnline);
                        return;
                    }
                }, ShowErrorMode.NO);
            });
            //设备控制反馈上报
            HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceRespone", ReceiveComandDiv.A节点控制反馈, (report) =>
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
                    if (this.dicDeviceCardControl.ContainsKey(mainKeys) == true)
                    {
                        //设备卡片
                        var deviceCardContr = this.dicDeviceCardControl[mainKeys];
                        //已经接收到网关的反馈
                        deviceCardContr.SetHadGetResponeResultStatu();
                    }
                }, ShowErrorMode.NO);
@@ -1196,16 +1168,54 @@
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //处理传感器上报数据
                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
                    string mainKeys = HdlDeviceCommonLogic.Current.GetDeviceMainKeys(report);
                    if (this.dicDeviceCardControl.ContainsKey(mainKeys) == true)
                    {
                        //本地设备对象
                        var locadevice = LocalDevice.Current.GetDevice(mainKeys);
                        //刷新卡片信息
                        this.dicDeviceCardControl[mainKeys].RefreshControlInfo(locadevice);
                        //开启卡片闪烁特效
                        this.dicDeviceCardControl[mainKeys].StartCardLightAppeal();
                    }
                }, ShowErrorMode.NO);
            });
        }
        #endregion
        #region ■ 传感器状态还原_____________________
        /// <summary>
        /// 开启传感器状态还原的线程
        /// </summary>
        private void StartRecoverSenorStatuThread()
        {
            HdlThreadLogic.Current.RunThread(() =>
            {
                while (this.Parent != null)
                {
                    try
                    {
                        var dicControl = this.dicDeviceCardControl;
                        foreach (var contr in dicControl.Values)
                        {
                            //如果是传感器,则刷新状态
                            if (contr.device.Type == DeviceType.IASZone && contr.Parent != null
                              && ((IASZone)contr.device).iASInfo == null)
                            {
                                HdlThreadLogic.Current.RunMain(() =>
                                {
                                    //设备状态必须刷新
                                    string statuText = HdlDeviceCommonLogic.Current.GetMainPageDeviceStatuText(contr.device);
                                    contr.SetDeviceStatuText(statuText);
                                    //传感器切换为灰色状态
                                    contr.SwitchCardStatuAppeal(false);
                                }, ShowErrorMode.NO);
                            }
                        }
                        System.Threading.Thread.Sleep(8000);
                    }
                    catch { System.Threading.Thread.Sleep(3000); }
                }
            });
        }
@@ -1218,14 +1228,17 @@
        /// </summary>
        private void ShowSelectFloorForm(NormalViewControl btnFloor)
        {
            var floorFL = new Device.Category.SelectFloor();
            var floorFL = new Category.SelectFloorForm();
            floorFL.CurFloorId = Config.Instance.Home.CurrentFloorId;
            this.AddChidren(floorFL);
            floorFL.Init(35, 153);
            floorFL.changeFloor = true;
            floorFL.FloorAction = (floorId) =>
            {
                btnFloor.Text = Config.Instance.Home.GetFloorNameById(floorId);
                HdlRoomLogic.Current.CurrentRoom = HdlRoomLogic.Current.GetLoveRoom();
                btnFloor.Text = HdlResidenceLogic.Current.GetFloorNameById(floorId);
                Config.Instance.Home.CurrentFloorId = floorId;
                HdlRoomLogic.Current.NowMainPageRoom = HdlRoomLogic.Current.GetLoveRoom();
                //分类界面需要刷新
                UserView.UserPage.Instance.RefreshCategoryForm = true;
                this.ShowForm();
            };
        }
@@ -1239,8 +1252,10 @@
        /// </summary>
        public override void CloseFormBefore()
        {
            //把静态变量的这个东西置空
            Instance = null;
            HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewDeviceOnline");
            HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewDeviceRespone");
            HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewDeviceStatus");
            HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewSensor");