private async void Current_PositionChanged(object sender, MediaManager.Playback.PositionChangedEventArgs e) { NowDuration = e.Position; NowDurationNum = e.Position.TotalMilliseconds; if (IsShowLrc) { var g = SongLyricsModels?.Where(q => q.Time <= e.Position.TotalMilliseconds).LastOrDefault(); if (now != g && g != null) { g.Color = Xamarin.Forms.Color.White; now.Color = Xamarin.Forms.Color.FromHex("#c1c1c1"); now = g; OnLrcChange?.Invoke(g); } } if (NowDuration >= MusicDuration && init) { await NextClickedAsync(); } }
void LoadLyrics(MusicLyric lyrics) { Task.Run(() => { ObservableCollection <SongLyricsModel> newLyrics = new ObservableCollection <SongLyricsModel>(); string[] lyr = lyrics.lrc.lyric.Split('\n'); foreach (string str in lyr) { if (str.Length > 0 && str.IndexOf(":") != -1) { TimeSpan time = GetLyricsTime(str); string lrc = str.Split(']')[1]; var lrmodel = new SongLyricsModel() { LyricsText = lrc, Time = time.TotalMilliseconds }; newLyrics.Add(lrmodel); } } if (lyrics.tlyric.lyric != null) { string[] tlylyr = lyrics.tlyric.lyric.Split('\n'); foreach (string str in tlylyr) { if (str.Length > 0 && str.IndexOf(":") != -1) { TimeSpan tlytime = GetLyricsTime(str); string lrc = str.Split(']')[1]; var g = newLyrics?.Where(q => q.Time == tlytime.TotalMilliseconds).FirstOrDefault(); if (g != null) { g.cnText = lrc; } } } } Device.BeginInvokeOnMainThread(() => SongLyricsModels = newLyrics); }); }