我在我的应用程序中使用 MediaController。但不幸的是,MediaController 在 3 秒后消失了。但我希望我的 MediaController 在我的视频完全播放之前可见。
如何实现这一点。
我在我的应用程序中使用 MediaController。但不幸的是,MediaController 在 3 秒后消失了。但我希望我的 MediaController 在我的视频完全播放之前可见。
如何实现这一点。
默认情况下,MediaController 会在 3 秒后隐藏自身。为了让它在我们的视频播放过程中可见,我们必须覆盖 MediaController 的 hide()。我在下面给出了代码片段。
final MediaController mc = new MediaController(this);
video.setMediaController(new MediaController(this) {
@Override
public void hide()
{
mc.show();
}
});
video.setMediaController(mc);
为了停止隐藏 MediaController,我们可以通过扩展基类来创建一个新的 Mediacontroller。然后我们可以通过简单地覆盖它来禁用隐藏方法。为了获得实际的隐藏功能,我们可以在基类中获取 hide() 方法。我们可以使用它在播放完成后隐藏 Mediacontroller。这是 MediaController 的代码:
public class MediaController_2 extends MediaController{
public MediaController_2(Context context) {
super(context);
}
public void hide() {
}
public void hidecontroller() {
super.hide();
}
}
现在媒体控制器即使在播放完成后也不会隐藏。为了在播放完成后隐藏控制器,我们可以使用 OnCompletionListener。
MediaController_2 mediaController = new MediaController_2(getActivity());
mediaPlayer.prepare();
mediaPlayer.start();
mediaController.show(0);
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mediaController.hidecontroller();
}
});
首先,int timeout
在方法中使用 an 作为参数show()
对我没有任何作用。
其次,这段简洁的代码强制控件在第一次触摸后停留在屏幕上:
// Assumes you have a VideoView in your layout called 'video_preview'.
VideoView videoPreview = (VideoView) findViewById(R.id.video_preview);
MediaController mediaController = new MediaController(this) {
@Override
public void hide() {} // Prevent hiding of controls.
};
videoPreview.setMediaController(mediaController);
VideoView videoPlayer;
MediaController mediaController;
videoPlayer = view.findViewById(R.id.videoPlayer);
Uri uri = Uri.parse(URL);
videoPlayer.setVideoURI(uri);
mediaController = new MediaController(getContext()) {
@Override
public void hide() {} // on hide do nothing
};
videoPlayer.setMediaController(mediaController);
videoPlayer.requestFocus();
videoPlayer.start();