为了解决VideoView在移除Fragment或设置为invisible/gone时出现的覆盖问题,可以尝试使用两种不同的方法。
方法一:通过在VideoView处使用setVisibility(View.VISIBLE)将其重新设置为可见,然后使用setVisibility(View.INVISIBLE)或setVisibility(View.GONE)来使其不可见。示例代码如下:
public void showVideoView() {
mVideoView.setVisibility(View.VISIBLE);
}
public void hideVideoView() {
mVideoView.setVisibility(View.INVISIBLE);
}
方法二:通过重新创建VideoView来解决问题。当要删除Fragment时,应该先释放VideoView。然后在需要其它页面的时候重新创建VideoView并添加到布局中。示例代码如下:
//在Fragment中添加构造函数
public MyFragment() {
//释放VideoView
if (mVideoView != null) {
mVideoView.stopPlayback();
}
}
//在Activity中添加方法
public void setUpVideoView() {
mVideoView = new VideoView(this);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
mRelativeLayout.addView(mVideoView, layoutParams);
mVideoView.setVideoURI(videoUri);
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
// TODO Auto-generated method stub
}
});
}
//在Fragment中通过调用Activity中的方法来重新创建VideoView
((MyActivity)getActivity()).setUpVideoView();