Xamarin.Forms WPF初心者です。
・やりたいこと
4分割で表示しているvlcのVideoViewを再生開始前までActivityIndicatorを表示させ、再生状態になった後非表示にしたい
・現状
1画面だけActivityIndicatorが非表示され、改めて停止→再生の処理をしても停止の時点でActivityIndicatorが非表示のままになっている(他3画面は常に表示)
xaml
1 <Grid> 2 <Grid.RowDefinitions> 3 <RowDefinition Height="2*"/> 4 <RowDefinition Height="2*"/> 5 </Grid.RowDefinitions> 6 <Grid.ColumnDefinitions> 7 <ColumnDefinition Width="*"/> 8 <ColumnDefinition Width="*"/> 9 </Grid.ColumnDefinitions> 10 11 <Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Margin="0,0,0,0" 12 x:Name="OBJ_GRID_VIEW_00" BackgroundColor="Transparent"> 13 <Grid.RowDefinitions> 14 <RowDefinition Height="*"/> 15 </Grid.RowDefinitions> 16 <Grid.ColumnDefinitions> 17 <ColumnDefinition Width="*"/> 18 </Grid.ColumnDefinitions> 19 <!-- LibVLCSharp --> 20 <vlc:VideoView Grid.Row="0" Grid.Column="0" 21 HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" 22 x:Name="OBJ_VLC_VIEW_00" 23 AutomationProperties.IsInAccessibleTree="True"/> 24 <!-- ロード中表示 --> 25 <ActivityIndicator Grid.Row="0" Grid.Column="0" 26 HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" 27 x:Name="OBJ_VLC_LOAD_00" 28 BackgroundColor="#CC000000" Color="White" IsRunning="true" /> 29 30 </Grid> 31 <!-- 省略 ↑のGridと同じようなコントロール群が3つ分ある --> 32 33 </Grid>
C#
1 2public partial class MainPage : ContentPage 3{ 4 VideoView[] objVlc = null; 5 ActivityIndicator[] objLoad = null; 6 Media[4] media = null; 7 LibVLC[4] libVLC = null; 8 9 public MainPage() 10 { 11 InitializeComponent(); 12 13 objVlc = new VideoView[4]{OBJ_VLC_VIEW_00, OBJ_VLC_VIEW_01, 14 OBJ_VLC_VIEW_02, OBJ_VLC_VIEW_03 }; 15 16 objLoad= new ActivityIndicator[4]{OBJ_VLC_LOAD_00, OBJ_VLC_LOAD_01, 17 OBJ_VLC_LOAD_02, OBJ_VLC_LOAD_03 }; 18 19 for (int i = 0; i < 4;i++) 20 { 21 libVLC[i]= new LibVLC(); 22 objVlc[i].MediaPlayer = new MediaPlayer(libVLC[i]) { EnableHardwareDecoding = true }; 23 } 24 } 25 26 //クリックイベント 27 public void VlcPlayClick(object sender, EventArgs e) 28 { 29 30 VlcStop(); 31 32 for (int i = 0; i < 4;i++) 33 { 34 media[i] = new Media(libVLC, /*URL*/, FromType.FromLocation); 35 objVlc[i].MediaPlayer.Play(media); 36 } 37 //本来は再生してるかの状態チェックを行ってから非表示にしている 38 for (int i = 0; i < 4;i++) 39 { 40 //ロード非表示 41 objLoad[i].IsVisible = false; 42 objLoad[i].IsRunning = false; 43 } 44 } 45 public void VlcStop() 46 { 47 for (int i = 0; i < 4;i++) 48 { 49 if(media[i] != null) 50 { 51 objVlc[i].MediaPlayer.Stop(); 52 media.Dispose(); 53 media = null; 54 } 55 } 56 for (int i = 0; i < 4;i++) 57 { 58 //ロード表示 59 objLoad[i].IsVisible = true; 60 objLoad[i].IsRunning = true; 61 } 62 } 63}
vlcの処理自体が重たいという印象があるので、処理の間にTaskやSleepを試したのですが、多少の挙動は変わるものの、安定した動作にはなりませんでした。
根本的におかしな点があるのでしょうか?ご回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。