我尝试在Android 4.4上显示我的应用中的一系列视频和一系列图像(在一个屏幕上显示两个图像,然后是下一个视频,然后是下一个图像,依此类推)。我首先加载视频,然后在视频结束时运行OnComplete()方法:
public class OnComplete : Object, MediaPlayer.IOnCompletionListener
{
public void OnCompletion(MediaPlayer mp)
{
Runnable switchMedia = new Runnable(() =>
{
MainActivity._handler.Post(new Runnable(() =>
{
int imageListLength = MainActivity.imgList.Count;
if(imageListLength > 0)
{
MainActivity.imageIndex = (MainActivity.imageIndex + 1) % imageListLength;
MainActivity.fullScreenVideo.Visibility = ViewStates.Gone;
MainActivity.dividedLayout.Visibility = ViewStates.Visible;
MainActivity.imgSwitcher1.SetImageURI(Android.Net.Uri.FromFile(new Java.IO.File(MainActivity.imgList[MainActivity.imageIndex])));
MainActivity.imageIndex = (MainActivity.imageIndex + 1) % imageListLength;
MainActivity.imgSwitcher2.SetImageURI(Android.Net.Uri.FromFile(new Java.IO.File(MainActivity.imgList[MainActivity.imageIndex])));
}
MainActivity._handler.PostDelayed(new Runnable(() =>
{
int videoListLength = MainActivity.vidList.Count;
if(videoListLength > 0)
{
MainActivity.videoIndex = (MainActivity.videoIndex + 1) % videoListLength;
MainActivity.fullScreenVideo.Visibility = ViewStates.Visible;
MainActivity.dividedLayout.Visibility = ViewStates.Gone;
MainActivity.fullScreenVideo.SetVideoURI(Android.Net.Uri.FromFile(new Java.IO.File(MainActivity.vidList[MainActivity.videoIndex])));
MainActivity.fullScreenVideo.Start();
}
}), 10000);
}));
});
switchMedia.Run();
}
}
这是一个主要课程:
[Activity(Label = "RandomDisplay", MainLauncher = true)]
public class MainActivity : Activity, ViewSwitcher.IViewFactory
{
public static List<string> imgList;
public static int imageIndex = 0;
public static List<string> vidList;
public static int videoIndex = 0;
public static LinearLayout dividedLayout;
public static ImageSwitcher imgSwitcher1;
public static ImageSwitcher imgSwitcher2;
public static VideoView fullScreenVideo;
public static Handler _handler;
public View MakeView()
{
ImageView imageView = new ImageView(this);
imageView.SetScaleType(ImageView.ScaleType.FitXy);
imageView.LayoutParameters = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);
return imageView;
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
imgList = new List<string>();
vidList = new List<string>();
PopulateList(ref imgList, @"/sdcard/Download/IV/Img/");
PopulateList(ref vidList, @"/sdcard/Download/IV/Video");
Window.AddFlags(WindowManagerFlags.Fullscreen);
ActionBar.Hide();
_handler = new Handler();
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
imgSwitcher1 = FindViewById<ImageSwitcher>(Resource.Id.ImageSwitcher1);
imgSwitcher1.SetFactory(this);
imgSwitcher2 = FindViewById<ImageSwitcher>(Resource.Id.ImageSwitcher2);
imgSwitcher2.SetFactory(this);
fullScreenVideo = FindViewById<VideoView>(Resource.Id.FullScreenVideo);
dividedLayout = FindViewById<LinearLayout>(Resource.Id.DividedScreenLayout);
dividedLayout.Visibility = ViewStates.Gone;
fullScreenVideo.SetVideoURI(Android.Net.Uri.FromFile(new Java.IO.File(vidList[0])));
fullScreenVideo.SetOnCompletionListener(new OnComplete());
fullScreenVideo.Start();
}
private void PopulateList(ref List<string> list, string directory)
{
Handler h = new Handler();
if (!Directory.Exists(directory))
{
h.PostAtFrontOfQueue(new Runnable(() =>
{
Toast.MakeText(this, directory + " doesn't exist.", ToastLength.Long).Show();
}));
return;
}
h.Post(new Runnable(() =>
{
Toast.MakeText(this, directory + " exists.", ToastLength.Long).Show();
}));
foreach (string s in Directory.GetFiles(directory))
{
list.Add(s);
}
}
}
视频和图片是从sdcard / Download目录加载的。视频播放始终如下所示:视频播放 - &gt;暂停一下 - &gt;继续正常发挥到最后。它可能有什么问题?
答案 0 :(得分:0)
视频和图片是从sdcard / Download目录加载的。视频播放始终如下所示:视频播放 - &gt;暂停一下 - &gt;继续正常发挥到最后。它可能有什么问题?
设备需要时间将视频加载到内存中。它没有问题,你需要的是将负载放入其中。您可以使用ProgressDialog或ProgressBar来执行此操作。并在OnPrepared
时停止进度。