我正在尝试创建自定义视频播放器。我使用 VideoView 来显示我的电影,并使用 MediaController 来控制视频。
当用户点击屏幕时,它应该显示标题和媒体控制器 3 秒(如果用户继续执行操作,则更长时间)。如果用户再次点击视频,它应该隐藏这两个元素。
在屏幕上第一次点击时,标题和控制器按我的预期显示。我的问题是,当我尝试再次点击屏幕时,它只会隐藏控制器并且标题不会消失。我认为这是因为 MediaController 定义了自己的水龙头表面,所以我的问题是如何更改它?如何在不编写我自己的 MediaController 的情况下更改 MediaController 对象的点击表面?
这是我用来实现我想要的代码:
private static final int ELAPSED_TIME = 2000;
private boolean visible;
@Override
public boolean onTouch(View v, MotionEvent event) {
// onTap
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Supprime le callback pour cacher les contrôles s'il y en avait un en cours
hideHandler.removeCallbacks(onElapsedTime);
// Affiche les contrôles s'il n'était pas déjà affichés
if (!visible) {
header.setVisibility(View.VISIBLE);
controller.show(0); // 0 -> Visible jusqu'à ce que hide() soit appelé
visible = true;
}
else {
header.setVisibility(View.GONE);
controller.hide();
visible = false;
}
// Défini un runnable a exécuter après ELAPSED_TIME pour cacher le header et le contrôleur
hideHandler.postDelayed(onElapsedTime, ELAPSED_TIME);
}
return true;
}
private Runnable onElapsedTime = new Runnable() {
public void run() {
header.setVisibility(View.GONE);
controller.hide();
visible = false;
}
};