Я использую Plugin.MediaManager.Forms
для воспроизведения списка аудио. Я также показываю тот же список элементов (текстовые данные) в виде списка. При воспроизведении аудио мне нужно изменить цвет фона элемента.
Мой код:
List<string> songsUrlList = new List<string>();
for (int i = 0; i < chaptersList.Count; i++)
{
songsUrlList.Add(aduioFormat+ chaptersList[i].audioUrl);
}
var mediaItem = await CrossMediaManager.Current.Play(songsUrlList);
Сначала я создал список аудио, а затем воспроизвел этот список, как описано выше. Я могу изменить цвет фона первого элемента. Когда начинает воспроизводиться оставшийся звук, я не знаю, как изменить цвет фона.
Если я нажму на элемент, я сначала удалю songsUrlList
, затем создам новый список и воспроизведу этот список, как показано ниже. Это правильная реализация?
private async void ChapterTapped(object sender, ItemTappedEventArgs e)
{
var selectedItem = (ListVerses)e.Item;
if (selectedItem != null)
{
await CrossMediaManager.Current.Pause();
songsUrlList.Clear();
for (int i = Int32.Parse(selectedItem.slno) - 1; i < chaptersList.Count; i++)
{
songsUrlList.Add(aduioFormat+ chaptersList[i].audioUrl);
}
await CrossMediaManager.Current.Play(songsUrlList);
audioOrder = Int32.Parse(selectedItem.slno) - 1;
selectedItem.BGColor = Color.FromHex("#f2ee71");
}
ChapterList.SelectedItem = null;
}
Мне нужно изменить цвет фона элемента списка, когда звук воспроизводит этот элемент. Я добавил ожидаемое тематическое видео здесь.
Я добавил образец проекта здесь для справки.
Вы можете реализовать событие MediaItemFinished
CrossMediaManager.Current.MediaItemFinished += Current_MediaItemFinished;
private void Current_MediaItemFinished(object sender, MediaManager.Media.MediaItemEventArgs e)
{
audioOrder = audioOrder + 1;
if (audioOrder < chaptersList.Count)
{
MyVidem.Source = aduioFormat + chaptersList[audioOrder].audioUrl;
ChapterList.ItemsSource = chaptersList;
chaptersList[audioOrder].BGColor = Color.FromHex("#f2ee71");
ChapterList.ScrollTo(((IList)ChapterList.ItemsSource)[audioOrder - 1], ScrollToPosition.Start, true);
}
}