C# Xamarin Android VideoView播放器控件不跟踪播放器位置
我在Xamarin Forms应用程序中有一个ListView,其中videoplayer作为ListViewItem。使用本机渲染器实现的视频播放器。它工作正常,但如果在显示播放器控件时移动videoplayer滚动列表视图,则控件不会跟随播放器位置 这是渲染器的某些部分。我不确定问题出在哪里,所以我不知道应该粘贴什么代码C# Xamarin Android VideoView播放器控件不跟踪播放器位置,c#,xamarin,xamarin.android,C#,Xamarin,Xamarin.android,我在Xamarin Forms应用程序中有一个ListView,其中videoplayer作为ListViewItem。使用本机渲染器实现的视频播放器。它工作正常,但如果在显示播放器控件时移动videoplayer滚动列表视图,则控件不会跟随播放器位置 这是渲染器的某些部分。我不确定问题出在哪里,所以我不知道应该粘贴什么代码 public class VideoPlayerRenderer : ViewRenderer<VideoPlayer, ARelativeLayout> 以
public class VideoPlayerRenderer : ViewRenderer<VideoPlayer, ARelativeLayout>
以下是一个解决方法:
在Droid项目中创建自定义MediaController:
class MyController : MediaController
{
private Context _context;
public MyController(Context context) : base(context)
{
_context = context;
}
private bool _isShowing { get; set; } = false;
public override bool IsShowing { get { return _isShowing; } }
public override void Show()
{
base.Show();
_isShowing = true;
ViewGroup parent = ((ViewGroup)this.Parent);
parent.Visibility = ViewStates.Visible;
}
public override void Hide()
{
base.Hide();
_isShowing = false;
ViewGroup parent = ((ViewGroup)this.Parent);
parent.Visibility = ViewStates.Gone;
}
}
然后在VideoPlayerRenderer中,在OnVideoViewPrepared方法中设置MediaController:
如果你有一个内置3个视频播放器的scrollview,它的行为是否相同?还是只在ListView上?我不知道,但答案很好,很高兴你解决了问题
mediaController = new MediaController(Context);
mediaController.SetMediaPlayer(videoView);
videoView.SetMediaController(mediaController);
class MyController : MediaController
{
private Context _context;
public MyController(Context context) : base(context)
{
_context = context;
}
private bool _isShowing { get; set; } = false;
public override bool IsShowing { get { return _isShowing; } }
public override void Show()
{
base.Show();
_isShowing = true;
ViewGroup parent = ((ViewGroup)this.Parent);
parent.Visibility = ViewStates.Visible;
}
public override void Hide()
{
base.Hide();
_isShowing = false;
ViewGroup parent = ((ViewGroup)this.Parent);
parent.Visibility = ViewStates.Gone;
}
}
private void OnVideoViewPrepared(object sender, EventArgs e)
{
MyController mc = new MyController(videoView.Context);
videoView.SetMediaController(mc);
FrameLayout f = (FrameLayout)mc.Parent;
Android.Widget.RelativeLayout.LayoutParams lp = new Android.Widget.RelativeLayout.LayoutParams(
Android.Widget.RelativeLayout.LayoutParams.MatchParent, Android.Widget.RelativeLayout.LayoutParams.WrapContent);
lp.AddRule(LayoutRules.AlignParentBottom);
((LinearLayout)f.Parent).RemoveView(f);
((Android.Widget.RelativeLayout)videoView.Parent).AddView(f, lp);
mc.SetAnchorView(videoView);
}