using System; using System.Collections.Generic; using System.Text; using Shared; using Shared.SimpleControl.Phone; using Shared.SimpleControl; using Shared.SimpleControl.R; namespace Shared.SimpleControl.Phone.Music { /// /// SD卡和Nas播放的界面 /// class PlayPage : FrameLayout { void showSourcePage () { switch (currentMusicModel.SourceID) { //sd case "1": #region sourceName.TextID = MyInternationalizationString.SDcard; like.Alpha = 1; like.Enable = true; list.Alpha = 1; list.Enable = true; prve.Alpha = 1; prve.Enable = true; next.Alpha = 1; next.Enable = true; mode.Alpha = 1; mode.Enable = true; #endregion break; //ftp case "2": #region sourceName.TextID = MyInternationalizationString.NAS; like.Alpha = 1; like.Enable = true; list.Alpha = 1; list.Enable = true; prve.Alpha = 1; prve.Enable = true; next.Alpha = 1; next.Enable = true; mode.Alpha = 1; mode.Enable = true; #endregion break; //cd case "6": #region sourceName.TextID = MyInternationalizationString.MusicCD; like.Alpha = 0.5f; like.Enable = false; list.Alpha = 0.5f; list.Enable = false; prve.Alpha = 0.5f; prve.Enable = false; next.Alpha = 0.5f; next.Enable = false; mode.Alpha = 0.5f; mode.Enable = false; #endregion break; //蓝牙 case "8": #region sourceName.TextID = MyInternationalizationString.Musicbluetooth; like.Alpha = 0.5f; like.Enable = false; list.Alpha = 0.5f; list.Enable = false; prve.Alpha = 1; prve.Enable = true; next.Alpha = 1; next.Enable = true; mode.Alpha = 0.5f; mode.Enable = false; #endregion break; //光纤 case "9": #region sourceName.TextID = MyInternationalizationString.MusicFD; like.Alpha = 0.5f; like.Enable = false; list.Alpha = 0.5f; list.Enable = false; prve.Alpha = 0.5f; prve.Enable = false; next.Alpha = 0.5f; next.Enable = false; mode.Alpha = 0.5f; mode.Enable = false; #endregion break; } } /// /// 1表示SD卡,2表示Nas /// public int SourceId { set { if (currentMusicModel.SourceID != value.ToString ()) { currentMusicModel.SourceID = value.ToString (); send ("*Z1SRC" + value); } } } /// /// 当前源的名称 /// Button sourceName = new Button { Width = Application.GetRealWidth (200), Height = Application.GetRealHeight (60), X = Application.GetRealWidth (230), Y = Application.GetRealHeight (175 - 130), }; /// /// 停止/播放; /// Button btnPlay = new Button { Width = Application.GetRealWidth (159), Height = Application.GetRealHeight (127), X = Application.GetRealWidth (260), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "MusicIcon/Playplay.png", SelectedImagePath = "MusicIcon/playmusicplaySelected.png", }; /// ///当前播放音乐时间 /// Button btnMusicplayTime = new Button { Width = Application.GetRealWidth (126), Height = Application.GetRealHeight (126), X = Application.GetRealWidth (10), Y = Application.GetRealHeight (820 - 130), }; /// /// 音乐总时间 /// Button btnTotalMusicTime = new Button { Width = Application.GetRealWidth (126), Height = Application.GetRealHeight (126), X = Application.GetRealWidth (520), Y = Application.GetRealHeight (820 - 130), }; /// /// 播放音乐时间进度条 /// Button progressMaxButton = new Button { Height = Application.GetRealHeight (4), Radius = (uint)Application.GetRealHeight (2), Gravity = Gravity.CenterVertical, BackgroundColor = 0xff525252, }; /// /// 播放进度 /// Button progressButton = new Button { Width = 0, Height = Application.GetRealHeight (4), Radius = (uint)Application.GetRealHeight (2), Gravity = Gravity.CenterVertical, BackgroundColor = 0xffFE5E00, }; /// /// 当前播放的音乐名称 /// Button title = new Button { Width = Application.GetMinRealAverage (350), Height = Application.GetMinRealAverage (60), TextSize = 15, X = Application.GetRealWidth (150), Y = Application.GetRealHeight (747 - 130), }; /// /// 静音图标 /// Button btnMute = new Button { Width = Application.GetRealWidth (107), Height = Application.GetRealHeight (127), X = Application.GetRealWidth (15), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "MusicIcon/PlayMute.png", SelectedImagePath = "MusicIcon/PlayMuteSelected.png", }; /// /// 音量进度条 /// HorizontalSeekBar horizontalSeekBarVol = new HorizontalSeekBar { Width = Application.GetRealWidth (490 - 26), Height = Application.GetRealHeight (50), Radius = (uint)Application.GetRealHeight (25), X = Application.GetRealWidth (13), Gravity = Gravity.CenterVertical, BackgroundColor = 0xFF525252, ProgressColor = 0xffFE5E00, Max = 79, }; /// ///模式图标,1单曲播放,2单曲循环,3连续播放,4连播循环 /// Button mode = new Button { Width = Application.GetRealWidth (94), Height = Application.GetRealHeight (82), X = Application.GetRealWidth (18), Y = Application.GetRealHeight (732 - 130), }; /// /// 收藏图标 /// Button like = new Button { Width = Application.GetRealWidth (106), Height = Application.GetRealHeight (103), X = Application.GetRealWidth (10), Y = Application.GetRealHeight (157 - 130), UnSelectedImagePath = "MusicIcon/PlayLike.png", SelectedImagePath = "MusicIcon/PlayLikeSelected.png", }; /// /// 显示播放列表 /// Button list = new Button { Width = Application.GetRealWidth (106), Height = Application.GetRealHeight (103), X = Application.GetRealWidth (540), Y = Application.GetRealHeight (727 - 130), UnSelectedImagePath = "MusicIcon/PlayList.png", }; /// /// 上一曲 /// Button prve = new Button { Width = Application.GetRealWidth (126), Height = Application.GetRealHeight (126), X = Application.GetRealWidth (127), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "MusicIcon/PlayPrve.png", SelectedImagePath = "MusicIcon/PlayPrveSelected.png", }; /// /// 下一曲 /// Button next = new Button { Width = Application.GetRealWidth (126), Height = Application.GetRealHeight (126), X = Application.GetRealWidth (430), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "MusicIcon/PlayNext.png", SelectedImagePath = "MusicIcon/PlayNextSelected.png", }; /// /// 当前界面对象 /// static PlayPage currentPlayMusic; /// /// 当前音乐对象 /// MusicModel currentMusicModel; /// /// 加载音乐播放界面 /// /// 当前音乐播放对象 /// 当前播放的音乐列表 /// 源ID,SD卡及Ftp源 public void Show (MusicModel musicModel, List playListmusic) { if (currentMusicModel != null) { currentPlayMusic.RemoveFromParent (); } currentPlayMusic = this; currentMusicModel = musicModel; //读取当前的音乐状态 readStatus (); AddChidren (new Button () { Height = Application.GetRealHeight (36), BackgroundColor =SkinStyle.Current.MusicTopFrameLayout, }); var topFrameLayout = new FrameLayout () { Height = Application.GetRealHeight (100), Y = Application.GetRealHeight (36), BackgroundColor = SkinStyle.Current.MusicTopFrameLayout, }; AddChidren (topFrameLayout); var back = new Button { Width = Application.GetMinRealAverage (72), Height = Application.GetMinRealAverage (89), X = Application.GetRealWidth (10), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "MusicIcon/PlayBack.png", }; topFrameLayout.AddChidren (back); back.MouseDownEventHandler += (sender, o) => { currentPlayMusic = null; //退出界面的时候,从父控件里移除掉 RemoveFromParent (); }; topFrameLayout.AddChidren (new Button { Width = Application.GetMinRealAverage (300), Height = Application.GetMinRealAverage (60), Text = musicModel.Name, TextSize = 15, Gravity = Gravity.Center, TextColor=SkinStyle.Current.MusicTextColor, }); var set = new Button { Width = Application.GetRealWidth (76), Height = Application.GetRealHeight (66), X = Application.GetRealWidth (550), UnSelectedImagePath = "MusicIcon/PlayMusicset.png", Gravity = Gravity.CenterVertical, Tag = musicModel, }; if (musicModel.MusicType == 1) { topFrameLayout.AddChidren (set); } set.MouseDownEventHandler += (sender, e) => { SourcePage sourcePage = new SourcePage { }; MainPage.MainFrameLayout.AddChidren (sourcePage); sourcePage.Show ((MusicModel)set.Tag); }; var middleFrameLayout = new FrameLayout () { Height = Application.GetRealHeight (1000+ 100), Y = topFrameLayout.Bottom, BackgroundImagePath = "MusicIcon/PlayBackgroun.png" }; AddChidren (middleFrameLayout); topFrameLayout.BringToFront ();//隐藏底层 if (musicModel.MusicType == 1) { middleFrameLayout.AddChidren (sourceName); } var portrait = new Button { Width = Application.GetRealWidth (392), Height = Application.GetRealHeight (392), X = Application.GetRealWidth (120), Y = Application.GetRealHeight (280 - 130), UnSelectedImagePath = "MusicIcon/PlayPortrait.png", }; middleFrameLayout.AddChidren (portrait); like.Tag = musicModel; like.MouseDownEventHandler += (sener, o) => { like.IsSelected = !like.IsSelected; string number = currentMusicModel.curTypeNumber + currentMusicModel.curListNumber + currentMusicModel.curSongNumber; if (like.IsSelected) { if (null == currentMusicModel.LovePlayList.Find ((song) => { return song.number == number; })) { //如果没有找到,就加入 currentMusicModel.LovePlayList.Add (new KeyAndValue { number = number, name = currentMusicModel.curPlayMusicName.Replace (".mp3", "") }); } } else { for (int i = 0; i < currentMusicModel.LovePlayList.Count; i++) { if (currentMusicModel.LovePlayList [i].number == number) { currentMusicModel.LovePlayList.RemoveAt (i); break; } } } //保存 string saveRoomUIName = "Room_" + Room.CurrentRoom.Name; Shared.IO.FileUtils.WriteFileByBytes (saveRoomUIName, Shared.SimpleControl.CommonPage.MyEncodingUTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (Room.CurrentRoom))); }; //middleFrameLayout.AddChidren(like); if (musicModel.MusicType == 1) { middleFrameLayout.AddChidren (mode); } mode.MouseDownEventHandler += Mode_MouseDownEventHandler; middleFrameLayout.AddChidren (title); list.Tag = musicModel.Name; if (musicModel.MusicType == 1) { middleFrameLayout.AddChidren (list); } list.MouseDownEventHandler += (sender, e) => { Button button = (Button)sender; ListPage listMusic = new ListPage { Width = LayoutParams.MatchParent, Height = LayoutParams.MatchParent, }; MainPage.MainFrameLayout.AddChidren (listMusic); if (currentMusicModel.SourceID == "1") { playListmusic = musicModel.SDCardSongList.FindAll (song => { return song.number.StartsWith (musicModel.curTypeNumber + musicModel.curListNumber); }); } else if (currentMusicModel.SourceID == "2") { playListmusic = musicModel.NasSongList.FindAll (song => { return song.number.StartsWith (musicModel.curTypeNumber + musicModel.curListNumber); }); } listMusic.Musiclist (musicModel, playListmusic, musicModel.curMusicListName, int.Parse (currentMusicModel.SourceID)); }; #region 歌曲时间 middleFrameLayout.AddChidren (btnMusicplayTime); middleFrameLayout.AddChidren (btnTotalMusicTime); var frameLayout1 = new FrameLayout { Width = Application.GetRealWidth (400 - 26), Height = Application.GetRealHeight (126), X = Application.GetRealWidth (150), Y = Application.GetRealHeight (820 - 130), }; middleFrameLayout.AddChidren (frameLayout1); frameLayout1.AddChidren (progressMaxButton); frameLayout1.AddChidren (progressButton); #endregion #region 上,下,暂停/播放 var tempFrameLayout = new FrameLayout { Height = Application.GetRealHeight (130), Y = Application.GetRealHeight (960 - 130) }; middleFrameLayout.AddChidren (tempFrameLayout); tempFrameLayout.AddChidren (prve); prve.MouseDownEventHandler += (sender, o) => { prve.IsSelected = true; send ("*S" + currentMusicModel.SourceID + "PREV"); };//下 prve.MouseUpEventHandler += (sender, o) => { prve.IsSelected = false; };//上 tempFrameLayout.AddChidren (btnPlay); btnPlay.MouseDownEventHandler += (sender, o) => { btnPlay.IsSelected = !btnPlay.IsSelected; if (btnPlay.IsSelected) { if (musicModel.MusicType== 2) { send ("*Z1ON"); } else { send ("*S" + currentMusicModel.SourceID + "PLAY"); } currentMusicModel.PlayStatus = MusicModel.Status.Play; } else { if (musicModel.MusicType == 2) { send ("*Z1OFF"); } else { send ("*S" + currentMusicModel.SourceID + "STOP"); } currentMusicModel.PlayStatus = MusicModel.Status.Stop; } }; next.MouseDownEventHandler += (sender, o) => { next.IsSelected = true; send ("*S" + currentMusicModel.SourceID + "NEXT"); }; next.MouseUpEventHandler += (sender, o) => { next.IsSelected = false; }; tempFrameLayout.AddChidren (next); #endregion #region 音量+,-,静音 tempFrameLayout.AddChidren (btnMute); btnMute.MouseDownEventHandler += (sender, e) => { btnMute.IsSelected = !btnMute.IsSelected; if (btnMute.IsSelected) { //静音之前先保存之前的音量,为还原音量 beforeVol = currentMusicModel.CurVol; send ("*Z1VOL79"); currentMusicModel.CurVol = "79"; } else { send ("*Z1VOL" + beforeVol); currentMusicModel.CurVol = beforeVol; } }; var btnMusicvol = new Button { Width = Application.GetRealWidth (107), Height = Application.GetRealHeight (127), X = Application.GetRealWidth (540), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "MusicIcon/PlayVoice.png", SelectedImagePath = "MusicIcon/PlayVoiceSelected.png", }; tempFrameLayout.AddChidren (btnMusicvol); btnMusicvol.MouseDownEventHandler += (sender, o) => { btnMusicvol.IsSelected = !btnMusicvol.IsSelected; if (btnMusicvol.IsSelected) { middleFrameLayout.Y -= Application.GetRealHeight (100); } else { middleFrameLayout.Y += Application.GetRealHeight (100); } }; var ProgFrameLayout = new FrameLayout { Width = LayoutParams.MatchParent, Height = Application.GetRealHeight (100), Y = Application.GetRealHeight (1120 - 130), }; middleFrameLayout.AddChidren (ProgFrameLayout); var btnMusicvo2 = new Button { Width = Application.GetRealWidth (107), Height = Application.GetRealHeight (127), X = Application.GetRealWidth (15), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "MusicIcon/PlayVoice.png", }; ProgFrameLayout.AddChidren (btnMusicvo2); var frameLayout = new FrameLayout { Width = Application.GetRealWidth (490), Height = Application.GetRealHeight (50), Gravity = Gravity.CenterVertical, X = Application.GetRealWidth (120), }; ProgFrameLayout.AddChidren (frameLayout); frameLayout.AddChidren (horizontalSeekBarVol); horizontalSeekBarVol.ProgressChanged += (sender, p) => { send ("*Z1VOL" + (79 - p)); }; #endregion } /// /// 模式切换 /// /// /// private void Mode_MouseDownEventHandler (object sender, MouseEventArgs e) { Button button = (Button)sender; switch (currentMusicModel.playMode) { //1单曲播放playModeDanquplay,2单曲循环playModeDDdanquplay, //3连续播放playModeshunxuplay,4连播循环playModeliebiaoplay case 1: currentMusicModel.playMode = 2; button.UnSelectedImagePath = "MusicIcon/playModeDDdanquplay.png"; button.IsSelected = false; break; case 2: currentMusicModel.playMode = 3; button.UnSelectedImagePath = "MusicIcon/playModeshunxuplay.png"; button.IsSelected = false; break; case 3: currentMusicModel.playMode = 4; button.UnSelectedImagePath = "MusicIcon/playModeliebiaoplay.png"; button.IsSelected = false; break; case 4: currentMusicModel.playMode = 1; button.UnSelectedImagePath = "MusicIcon/playModeDanquplay.png"; button.IsSelected = false; break; default: currentMusicModel.playMode = 3; button.UnSelectedImagePath = "MusicIcon/playModeshunxuplay.png"; button.IsSelected = false; break; } send ("*S" + currentMusicModel.SourceID + "MODE+"); } //点击静音之前的音量 string beforeVol = "30"; /// /// 发送控制命令 /// /// void send (string command) { //当控制完成时,马上读取状态,会有问题,所以控制后5秒再读取 MyMusic.dateTime = System.DateTime.Now; ////如果不是当前源,就先切换源 //if (currentMusicModel.SourceID != currentMusicModel.SourceID.ToString()) //{ // Control.ControlBytesSend(Command.ControlMusicModel, currentMusicModel.SubnetID, currentMusicModel.DeviceID, MusicModel.MusiceBytes("*Z1SRC" + sourceId)); //} //发送控制命令 Control.ControlBytesSend (Command.ControlMusicModel, currentMusicModel.SubnetID, currentMusicModel.DeviceID, MusicModel.MusiceBytes (command), SendCount.Zero); } /// /// 读取音乐状态 /// void readStatus () { System.Threading.Tasks.Task.Run (() => { System.DateTime dateTime = System.DateTime.Now.AddSeconds (-5); while (Parent != null) { //等待1秒,更新界面 System.Threading.Thread.Sleep (1000 * 1); Application.RunOnMainThread (() => { #region try { showSourcePage (); //总共有多少秒 int totalSecond = int.Parse (currentMusicModel.musicTime) / 10; //分钟 int totalMusicMinute = totalSecond / 60; //秒钟 int totalMusicSecond = totalSecond % 60; string totalTime = (totalMusicMinute.ToString ().Length < 2 ? "0" + totalMusicMinute.ToString () : totalMusicMinute.ToString ()) + ":" + (totalMusicSecond.ToString ().Length < 2 ? "0" + totalMusicSecond.ToString () : totalMusicSecond.ToString ()); btnTotalMusicTime.Text = totalTime; title.Text = currentMusicModel.curPlayMusicName.Replace (".mp3", ""); horizontalSeekBarVol.Progress = 79 - int.Parse (currentMusicModel.CurVol); switch (currentMusicModel.playMode) { #region case 1: mode.UnSelectedImagePath = "MusicIcon/playModeDanquplay.png"; break; case 2: mode.UnSelectedImagePath = "MusicIcon/playModeDDdanquplay.png"; break; case 3: mode.UnSelectedImagePath = "MusicIcon/playModeshunxuplay.png"; break; case 4: mode.UnSelectedImagePath = "MusicIcon/playModeliebiaoplay.png"; break; default: mode.UnSelectedImagePath = "MusicIcon/playModeshunxuplay.png"; break; #endregion } if (currentMusicModel.SourceID == "1") { var likeMusic = currentMusicModel.LovePlayList.Find ((like) => { return like.number == currentMusicModel.curTypeNumber + currentMusicModel.curListNumber + currentMusicModel.curSongNumber; }); //找到当前的播放ID,就说明是收藏音乐 like.IsSelected = likeMusic != null; } else if (currentMusicModel.SourceID == "2") { var likeMusic = currentMusicModel.NasSongList.Find ((like) => { return like.number == currentMusicModel.curTypeNumber + currentMusicModel.curListNumber + currentMusicModel.curSongNumber; }); //找到当前的播放ID,就说明是收藏音乐 like.IsSelected = likeMusic != null; } btnMute.IsSelected = currentMusicModel.CurVol == "79" ? true : false; if (currentMusicModel.PlayStatus == MusicModel.Status.Play) { btnPlay.IsSelected = true; //如果在播放,时间就不断变化 //当前播放音乐时间 int playSecond = int.Parse (currentMusicModel.musicPalyTime) / 10 + (int)(DateTime.Now - currentMusicModel.LastDateTime).TotalSeconds; //分钟 int playMusicMinute = playSecond / 60; //秒钟 int playMusicSecond = playSecond % 60; string playTime = (playMusicMinute.ToString ().Length < 2 ? "0" + playMusicMinute.ToString () : playMusicMinute.ToString ()) + ":" + (playMusicSecond.ToString ().Length < 2 ? "0" + playMusicSecond.ToString () : playMusicSecond.ToString ()); btnMusicplayTime.Text = playTime; if (totalSecond == 0) { progressButton.Width = 0; } else { progressButton.Width = (int)(playSecond * 1.0 / totalSecond * progressMaxButton.Width); } } else { //停止状态 btnPlay.IsSelected = false; progressButton.Width = 0; btnMusicplayTime.Text = "00:00"; btnTotalMusicTime.Text = "00:00"; } } catch { } #endregion //CD 蓝牙 光纤 if (currentMusicModel.SourceID == "8" || currentMusicModel.SourceID == "6" || currentMusicModel.SourceID == "9") { title.Text = "UnKown"; progressButton.Width = 0; btnMusicplayTime.Text = "00:00"; btnTotalMusicTime.Text = "00:00"; } }); } }); } } }