视频查看触摸事件:暂停/恢复视频,以及显示/隐藏媒体控制器和操作栏
问题摘要:
1)如何首先将视频显示为暂停,而不是立即播放?
2)如何在触摸时暂停/取消暂停视频,以及隐藏/显示动作栏和媒体控制器。
我将不胜感激任何建议。谢谢!(附相关条文)
更新 1
找到了问题2的解决方案(需要返回false),但我仍然不知道如何回答问题1。
当用户在我的应用中按下按钮时,他们需要观看他们的视频。当他们第一次打开该屏幕时,我希望视频暂停并且不会立即播放。我还希望能够通过点击屏幕来暂停视频的播放。当视频暂停时,我想显示 和 .当视频恢复时,我想隐藏和(可能在稍有延迟之后?ActionBar
MediaController
ActionBar
MediaController
我已经尝试了一些事情,但我最终遇到了问题,例如视频将暂停但无法恢复,或者并且无法正确显示或隐藏。ActionBar
MediaController
更新 2
我找到了问题1的部分解决方案,并更新了代码,以便在首次打开视频时将视频显示为暂停。但是,当它第一次打开时,它只显示黑屏,直到我触摸视频视图播放它。观看视频一次后,它将重置为开头并暂停,等待再次播放,并从视频开头显示正确的图像。但是我不知道一开始如何绕过黑屏。
相关代码:
public class ViewImageVideoFragment extends Fragment
{
private int position = 0;
private MediaController mMediaController;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mMediaController = new MediaController(getActivity());
...
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
if (savedInstanceState != null)
{
position = savedInstanceState.getInt("position");
}
View v = inflater.inflate(R.layout.fragment_video_view, parent, false);
mVideoView = (VideoView) v.findViewById(R.id.fragmentVideoView);
mVideoView.setVideoPath(videoPath);
mVideoView.setMediaController(mMediaController);
mVideoView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent motionEvent)
{
if (mVideoView.isPlaying())
{
mVideoView.pause();
if (!getActivity().getActionBar().isShowing())
{
getActivity().getActionBar().show();
mMediaController.show(0);
}
position = mVideoView.getCurrentPosition();
return false;
}
else
{
if (getActivity().getActionBar().isShowing())
{
getActivity().getActionBar().hide();
mMediaController.hide();
}
mVideoView.seekTo(position);
mVideoView.start();
return false;
}
}
});
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mediaPlayer)
{
mVideoView.seekTo(0);
}
});
if (position != 0)
{
mVideoView.seekTo(position);
mVideoView.start();
}
else
{
mVideoView.seekTo(0);
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
super.onSaveInstanceState(savedInstanceState);
if (mVideoView != null)
{
savedInstanceState.putInt("position", mVideoView.getCurrentPosition());
}
mVideoView.pause();
}
}