New file |
| | |
| | | using Shared; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | using HDL_ON.UI.CSS; |
| | | using HDL_ON.Entity; |
| | | using HDL_ON.DriverLayer; |
| | | using HDL_ON.UI.Music; |
| | | using HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock; |
| | | |
| | | namespace HDL_ON.UI |
| | | { |
| | | /// <summary> |
| | | /// 视频门锁的控制界面 |
| | | /// </summary> |
| | | public class VideoDoorLockPage : FrameLayout |
| | | { |
| | | #region ■ 变量声明___________________________ |
| | | /// <summary> |
| | | /// 设备 |
| | | /// </summary> |
| | | private Function device; |
| | | /// <summary> |
| | | /// 上一级界面的设备名字控件 |
| | | /// </summary> |
| | | private Button btnDeviceName; |
| | | /// <summary> |
| | | /// 上一级界面的房间名字控件 |
| | | /// </summary> |
| | | private Button btnRoomName; |
| | | /// <summary> |
| | | /// 头部布局 |
| | | /// </summary> |
| | | private TopView topView; |
| | | /// <summary> |
| | | /// 当前设备名称 |
| | | /// </summary> |
| | | private Button btnCurrDeviceName; |
| | | /// <summary> |
| | | /// 区域 |
| | | /// </summary> |
| | | private Button btnCurrDeviceRoom; |
| | | /// <summary> |
| | | /// 电量父控件 |
| | | /// </summary> |
| | | private FrameLayout cellFrame; |
| | | /// <summary> |
| | | /// 电量 |
| | | /// </summary> |
| | | private Button btnCell; |
| | | /// <summary> |
| | | /// 电量进度条 |
| | | /// </summary> |
| | | private DiyArcSeekBar cellDiyArcSeekBar; |
| | | /// <summary> |
| | | ///收藏图标 |
| | | /// </summary> |
| | | private Button btnCollectIcon; |
| | | /// <summary> |
| | | /// 门锁状态 |
| | | /// </summary> |
| | | private Button btnDoorLockIcon; |
| | | /// <summary> |
| | | /// 实时视频 |
| | | /// </summary> |
| | | private CustomFrameLayout rtvFL; |
| | | /// <summary> |
| | | /// 临时密码 |
| | | /// </summary> |
| | | private CustomFrameLayout pswFL; |
| | | /// <summary> |
| | | /// 历史记录 |
| | | /// </summary> |
| | | private CustomFrameLayout recordFL; |
| | | |
| | | /// <summary> |
| | | /// 表示来自那个界面 |
| | | /// </summary> |
| | | private CommonMethod.Comerom comerom; |
| | | /// <summary> |
| | | /// 删除设备后需要更新界面的回调 |
| | | /// </summary> |
| | | public Action action; |
| | | #endregion |
| | | |
| | | |
| | | /// <summary> |
| | | /// 构造函数 |
| | | /// </summary> |
| | | /// <param name="function">设备</param> |
| | | /// <param name="btnDeviceName">上一级界面的设备名字控件(注:不能传null,没有可以传new Button())</param> |
| | | /// <param name="btnRoomName">上一级界面的房间名字控件(注:不能传null,没有可以传new Button())</param> |
| | | public VideoDoorLockPage(Function function, Button btnDeviceName, Button btnRoomName, CommonMethod.Comerom comerom, Action action) |
| | | { |
| | | this.device = function; |
| | | this.btnDeviceName = btnDeviceName; |
| | | this.btnRoomName = btnRoomName; |
| | | this.comerom = comerom; |
| | | this.action = action; |
| | | |
| | | } |
| | | |
| | | public void Show() |
| | | { |
| | | //初始化UI |
| | | this.InitUI(); |
| | | //初始化事件 |
| | | this.EventListener(); |
| | | //读取数据 |
| | | this.ReadData(); |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 初始化界面 |
| | | /// </summary> |
| | | private void InitUI() |
| | | { |
| | | #region ---界面布局--- |
| | | this.BackgroundColor = MusicColor.ViewColor; |
| | | this.topView = new TopView(); |
| | | this.topView.setBtn.Visible = true; |
| | | this.topView.topNameBtn.TextID = StringId.shipinmensuo; |
| | | this.AddChidren(topView.TopFLayoutView()); |
| | | var middleFl = new FrameLayout |
| | | { |
| | | Y = topView.fLayout.Bottom, |
| | | Height = Application.GetRealHeight(H_W.H - H_W.T_Height), |
| | | }; |
| | | this.AddChidren(middleFl); |
| | | |
| | | var whiteFl = new FrameLayout |
| | | { |
| | | Y = Application.GetRealHeight(24), |
| | | X = Application.GetRealWidth(24), |
| | | Height = Application.GetRealHeight(526), |
| | | Width = Application.GetRealWidth(327), |
| | | BackgroundImagePath = "MusicIcon/playBj.png", |
| | | Name = "fl", |
| | | }; |
| | | middleFl.AddChidren(whiteFl); |
| | | |
| | | btnCollectIcon = new Button |
| | | { |
| | | X = Application.GetRealWidth(264), |
| | | Y = Application.GetRealHeight(14), |
| | | Width = Application.GetRealWidth(40), |
| | | Height = Application.GetRealWidth(40), |
| | | UnSelectedImagePath = "MusicIcon/collect.png", |
| | | SelectedImagePath = "MusicIcon/collectSelected.png", |
| | | IsSelected = this.device.collect, |
| | | Name = "collect" |
| | | }; |
| | | whiteFl.AddChidren(btnCollectIcon); |
| | | |
| | | btnCurrDeviceName = new Button |
| | | { |
| | | TextSize = TextSize.Text24, |
| | | TextColor = MusicColor.Text18Color, |
| | | Width = Application.GetRealWidth(160), |
| | | Height = Application.GetRealHeight(33), |
| | | Y = Application.GetRealHeight(16), |
| | | X = Application.GetRealWidth(16), |
| | | Text = this.device.name, |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | }; |
| | | whiteFl.AddChidren(btnCurrDeviceName); |
| | | |
| | | |
| | | btnCurrDeviceRoom = new Button |
| | | { |
| | | TextSize = TextSize.Text12, |
| | | TextColor = MusicColor.MusicNoTxetColor, |
| | | Width = Application.GetRealWidth(160), |
| | | Height = Application.GetRealHeight(17), |
| | | Y = btnCurrDeviceName.Bottom + Application.GetRealHeight(4), |
| | | X = Application.GetRealWidth(16), |
| | | Text = this.device.GetRoomListName(), |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | }; |
| | | whiteFl.AddChidren(btnCurrDeviceRoom); |
| | | |
| | | cellFrame = new FrameLayout |
| | | { |
| | | X = btnCurrDeviceRoom.Right + Application.GetRealWidth(20), |
| | | Y = btnCurrDeviceName.Bottom + Application.GetRealHeight(5), |
| | | Width = Application.GetRealWidth(30), |
| | | Height = Application.GetRealHeight(16), |
| | | }; |
| | | whiteFl.AddChidren(cellFrame); |
| | | |
| | | cellDiyArcSeekBar = new DiyArcSeekBar |
| | | { |
| | | X = Application.GetRealWidth(3), |
| | | Y = Application.GetRealHeight(3), |
| | | Width = cellFrame.Width + Application.GetRealWidth(-6), |
| | | Height = cellFrame.Height + Application.GetRealHeight(-6), |
| | | Progress = 60, |
| | | ProgressBarColor = MusicColor.MusicNoTxetColor, |
| | | MaxValue = 100, |
| | | MinValue = 0, |
| | | |
| | | //IsCanMove = false, |
| | | //IsCanScrolled=false, |
| | | }; |
| | | //cellFrame.AddChidren(cellDiyArcSeekBar); |
| | | |
| | | btnCell = new Button |
| | | { |
| | | TextSize = TextSize.Text10, |
| | | TextColor = MusicColor.TextColor, |
| | | Text = "60" + "%", |
| | | TextAlignment = TextAlignment.Center, |
| | | UnSelectedImagePath = "FunctionIcon/DoorLock/Cell.png", |
| | | }; |
| | | cellFrame.AddChidren(btnCell); |
| | | |
| | | |
| | | //门锁状态 |
| | | btnDoorLockIcon = new Button |
| | | { |
| | | X = Application.GetRealWidth(65), |
| | | Y = Application.GetRealHeight(108), |
| | | Width = Application.GetRealWidth(198), |
| | | Height = Application.GetRealWidth(200), |
| | | UnSelectedImagePath = "FunctionIcon/DoorLock/UnLocked.png", |
| | | SelectedImagePath = "FunctionIcon/DoorLock/UnLocking.png", |
| | | }; |
| | | whiteFl.AddChidren(btnDoorLockIcon); |
| | | |
| | | this.CalculatedPosition();//重新计算宽度 |
| | | |
| | | int heightY = btnDoorLockIcon.Bottom + Application.GetRealHeight(70); |
| | | //实时视频 |
| | | rtvFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout); |
| | | whiteFl.AddChidren(rtvFL); |
| | | rtvFL.Y = heightY; |
| | | rtvFL.X = Application.GetRealWidth(41); |
| | | rtvFL.AddImageView(); |
| | | rtvFL.AddTextButtonView(); |
| | | rtvFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/RTV.png"; |
| | | rtvFL.GetTextButton().TextID = StringId.shishishipin; |
| | | //历史记录 |
| | | recordFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout); |
| | | whiteFl.AddChidren(recordFL); |
| | | recordFL.Y = heightY; |
| | | recordFL.X = rtvFL.Right + Application.GetRealWidth(CustomFrameLayout.interval); |
| | | recordFL.AddImageView(); |
| | | recordFL.AddTextButtonView(); |
| | | recordFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/HistoryList.png"; |
| | | recordFL.GetTextButton().TextID = StringId.lishijilu; |
| | | //临时密码 |
| | | pswFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout); |
| | | whiteFl.AddChidren(pswFL); |
| | | pswFL.Y = heightY; |
| | | pswFL.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval); |
| | | pswFL.AddImageView(); |
| | | pswFL.AddTextButtonView(); |
| | | pswFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/OneOpenLock.png"; |
| | | pswFL.GetTextButton().TextID = StringId.linshimima1; |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 注册事件 |
| | | /// </summary> |
| | | private void EventListener() |
| | | { |
| | | //返回 |
| | | this.topView.clickBackBtn.MouseUpEventHandler += (sender, e) => |
| | | { |
| | | this.RemoveFromParent(); |
| | | }; |
| | | //设置 |
| | | this.topView.clickSetBtn.MouseUpEventHandler += (sender, e) => |
| | | { |
| | | CommonMethod.Current.MainThread(() => |
| | | { |
| | | //调用秀绕的界面 |
| | | var infoView = new UI.FunctionBaseInfoSetPage(this.device, () => |
| | | { |
| | | if (this.btnDeviceName == null || this.btnRoomName == null || this.device == null) |
| | | { |
| | | return; |
| | | } |
| | | ////刷新显示 |
| | | this.btnDeviceName.Text = this.device.name; |
| | | this.btnRoomName.Text = this.device.GetRoomListName(); |
| | | this.btnCurrDeviceName.Text = this.device.name; |
| | | this.btnCurrDeviceRoom.Text = this.device.GetRoomListName(); |
| | | this.CalculatedPosition();//重新计算宽度 |
| | | |
| | | }); |
| | | infoView.actionDel += () => |
| | | { |
| | | //解绑设备后 |
| | | this.RemoveFromParent(); |
| | | this.action?.Invoke(); |
| | | |
| | | }; |
| | | MainPage.BasePageView.AddChidren(infoView); |
| | | infoView.LoadPage(); |
| | | MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; |
| | | }); |
| | | }; |
| | | //收藏 |
| | | this.btnCollectIcon.MouseUpEventHandler += (sender, e) => |
| | | { |
| | | btnCollectIcon.IsSelected = this.device.collect = !btnCollectIcon.IsSelected; |
| | | this.device.CollectFunction(); |
| | | }; |
| | | //实时视频 |
| | | this.rtvFL.SetClickListener((fl, btnStateImage, btnStateText) => |
| | | { |
| | | CommonMethod.Current.SkipRTVActivity(this.device.sid, this.device.deviceId, this.device.spk, false); |
| | | }); |
| | | //临时密码 |
| | | this.pswFL.SetClickListener((fl, btnStateImage, btnStateText) => |
| | | { |
| | | CommonMethod.Current.SkipPSWActivity(this.device.deviceId); |
| | | }); |
| | | //历史记录 |
| | | this.recordFL.SetClickListener((fl, btnStateImage, btnStateText) => |
| | | { |
| | | CommonMethod.Current.SkipRecordActivity(this.device.deviceId); |
| | | }); |
| | | |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 初始数据 |
| | | /// </summary> |
| | | private void ReadData() |
| | | { |
| | | CommonMethod.Current.Loading.Start(); |
| | | CommonMethod.Current.SunThread(() => |
| | | { |
| | | try |
| | | { |
| | | var videoDoorLockInfo = VideDoorLockSend.Current.GetVideoDoorLockState(this.device); |
| | | var cellInfo = VideDoorLockSend.Current.GetCellValue(this.device); |
| | | CommonMethod.Current.MainThread(() => |
| | | { |
| | | //this.cellDiyArcSeekBar.Progress = i; |
| | | //更新电量值 |
| | | this.btnCell.Text = cellInfo.remain + "%"; |
| | | this.btnDoorLockIcon.IsSelected = videoDoorLockInfo.doorStatus == "open"; |
| | | }); |
| | | } |
| | | catch { } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | CommonMethod.Current.Loading.Hide(); |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 重新计算宽度(设备名称,房间控件) |
| | | /// </summary> |
| | | private void CalculatedPosition() |
| | | { |
| | | this.btnCurrDeviceName.Width = this.btnCurrDeviceName.GetTextWidth(); |
| | | if (this.btnCurrDeviceName.GetTextWidth() > this.btnCollectIcon.X) |
| | | { |
| | | //重新计算宽度 |
| | | this.btnCurrDeviceName.Width = this.btnCollectIcon.X + Application.GetRealWidth(-10); |
| | | } |
| | | this.btnCurrDeviceRoom.Width = this.btnCurrDeviceRoom.GetTextWidth(); |
| | | if (this.btnCurrDeviceRoom.GetTextWidth() > this.btnCollectIcon.X) |
| | | { |
| | | //重新计算宽度 |
| | | this.btnCurrDeviceRoom.Width = this.btnCollectIcon.X + Application.GetRealWidth(-20 - 10); |
| | | } |
| | | this.cellFrame.X = this.btnCurrDeviceRoom.Right + Application.GetRealWidth(20); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新状态 |
| | | /// </summary> |
| | | public void UpdateState(PushMessageType pushMessageType) |
| | | { |
| | | CommonMethod.Current.MainThread(() => |
| | | { |
| | | if (pushMessageType == PushMessageType.Alarm) |
| | | { |
| | | //门锁电池值 |
| | | if (this.btnCell != null) |
| | | { |
| | | //videoDoorLockPage.btnCell.Text = ""; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (this.btnDoorLockIcon != null && !this.btnDoorLockIcon.IsSelected) |
| | | { |
| | | this.btnDoorLockIcon.IsSelected = false; |
| | | } |
| | | } |
| | | |
| | | }); |
| | | |
| | | } |
| | | |
| | | } |
| | | /// <summary> |
| | | /// 自己弄一个FrameLayout |
| | | /// </summary> |
| | | class CustomFrameLayout : FrameLayout |
| | | { |
| | | public const int widthFrameLayout = 48; |
| | | public const int heightFrameLayout = 53; |
| | | public const int yFrameLayout = 378; |
| | | public const int xFrameLayout = 41; |
| | | public const int interval = 51;//行中的列间隔值 |
| | | |
| | | public CustomFrameLayout(int width, int height, int x = 0, int y = 0) |
| | | { |
| | | this.Width = Application.GetRealWidth(width); |
| | | this.Height = Application.GetRealHeight(height); |
| | | this.X = Application.GetRealWidth(x); |
| | | this.Y = Application.GetRealHeight(y); |
| | | |
| | | } |
| | | Button btnStateImage = new Button |
| | | { |
| | | Width = Application.GetRealWidth(32), |
| | | Height = Application.GetRealWidth(32), |
| | | Gravity = Gravity.TopCenter, |
| | | Name = "btnStateImage", |
| | | |
| | | }; |
| | | Button btnStateText = new Button |
| | | { |
| | | Y = Application.GetRealHeight(4), |
| | | Width = Application.GetRealWidth(100), |
| | | Height = Application.GetRealWidth(20), |
| | | TextID = StringId.dangqianmenweiguan, |
| | | TextSize = TextSize.Text12, |
| | | TextColor = MusicColor.TextCancelColor, |
| | | TextAlignment = TextAlignment.Center, |
| | | Gravity = Gravity.CenterHorizontal, |
| | | Name = "btnStateText" |
| | | }; |
| | | public void AddImageView() |
| | | { |
| | | this.AddChidren(btnStateImage); |
| | | |
| | | } |
| | | public void AddTextButtonView() |
| | | { |
| | | btnStateText.Y += btnStateImage.Bottom; |
| | | this.AddChidren(btnStateText); |
| | | } |
| | | public Button GetImageButton() |
| | | { |
| | | //if (!this.AddWithout(this.btnStateImage)) |
| | | //{ |
| | | // this.AddImageView(); |
| | | //} |
| | | return this.btnStateImage; |
| | | } |
| | | public Button GetTextButton() |
| | | { |
| | | //if (!this.AddWithout(this.btnStateText)) |
| | | //{ |
| | | // this.AddTextButtonView(); |
| | | //} |
| | | return this.btnStateText; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 事件监听方法 |
| | | /// </summary> |
| | | /// <param name="action">回调(第一个是父类对象;第二个是图标对象;第三个是状态对象</param> |
| | | /// <param name="button1">注意:在SetClickListener()前面调用AddImageView()才有效</param> |
| | | /// <param name="button2">注意:在SetClickListener()前面调用AddImageView()才有效</param> |
| | | public void SetClickListener(Action<FrameLayout, Button, Button> action) |
| | | { |
| | | EventHandler<MouseEventArgs> click = (sender, e) => |
| | | { |
| | | action?.Invoke(this, btnStateImage, btnStateText); |
| | | }; |
| | | this.MouseUpEventHandler += click; |
| | | btnStateImage.MouseUpEventHandler += click; |
| | | btnStateText.MouseUpEventHandler += click; |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 在父布局查找子控件是否存在 |
| | | /// </summary> |
| | | /// <param name="btn">查找对象</param> |
| | | /// <returns>存在为true,否则为false</returns> |
| | | private bool AddWithout(View btn) |
| | | { |
| | | |
| | | if (this.ChildrenCount <= 0 || btn == null) |
| | | { |
| | | return false; |
| | | } |
| | | for (int i = 0; i < this.ChildrenCount; i++) |
| | | { |
| | | View view = this.GetChildren(i); |
| | | if (view == null) |
| | | { |
| | | continue; |
| | | } |
| | | if (view is Button) |
| | | { |
| | | if (view.Name == btn.Name) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | } |
| | | return false; |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |