J'ai écrit ces lignes de code:
mVideoView = (VideoView) findViewById(R.id.video_view);
mVideoView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v("LOG_TAG, click");
}
});
Cependant, lorsque j'exécute mon application, l'événement click n'est jamais appelé.
Je me demande donc s'il est impossible d'enregistrer un OnClickListener sur un VideoView? Et si oui, pourquoi est-ce le cas?
utiliser VideoView.setOnTouchListener(..)
cela fonctionne pour VideoView
Je sais que c’est une question ancienne, mais voici ce que j’ai fait:
Comme setOnClickListener n'est pas déclenché, j'ai créé ma propre classe, qui étend VideoView
public class VideoViewCustom extends VideoView{
et annulé l'événement onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_DOWN){
Log.d(TAG, "ACTION_DOWN");
}
return super.onTouchEvent(ev);
}
et maintenant je peux obtenir l'événement onClick avec MotionEvent.
J'espère que cela aide quelqu'un!
Voici comment j'ai résolu la pause/lecture de VideoViews avec onTouch:
// Class variables
private boolean bVideoIsBeingTouched = false;
private Handler mHandler = new Handler();
vvVideo.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (!bVideoIsBeingTouched) {
bVideoIsBeingTouched = true;
if (vvVideo.isPlaying()) {
vvVideo.pause();
} else {
vvVideo.resume();
}
mHandler.postDelayed(new Runnable() {
public void run() {
bVideoIsBeingTouched = false;
}
}, 100);
}
return true;
}
});
Je sais que c'est vieux mais j'ai utilisé ceci:
mVideoView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG, "Video 1 clicked, starting playback");
return false;
}
});
Cela aurait probablement dû être fait depuis longtemps, ce qui pourrait néanmoins aider les personnes susceptibles de rencontrer un problème similaire. Pour résoudre ce problème, j’ai posé une vue d’image transparente juste au-dessus de la vue vidéo, puis écouté les événements onClick sur la vue d’image et fait ce que je voulais faire par la suite.
Je me rends compte que c’est une vieille question, mais j’ai pensé que j’écrirais avec une solution de contournement facile. Je ne peux pas répondre pourquoi cela ne fonctionne pas - me semble être un oubli important. Mais une solution de contournement simple consiste à placer votre VideoView comme seule vue dans un FrameLayout et à définir un OnClickListener sur la présentation. Pas idéal, mais ça marche.
Vous pouvez également utiliser un bouton transparent sur la vue vidéo si vous souhaitez qu'une partie spécifique de la vidéo tactile fasse quelque chose.
VideoView est un wrapper contenant mdeiaplayer et surfaceView. Vous pouvez interagir avec MediaController ou écrire votre propre SurfaceView et implémenter des événements onClick.
Vous pourriez essayer Vue superposition de geste
Vous devriez pouvoir superposer cette vue sur une autre vue pour obtenir des événements tactiles.
J'espère que cela t'aides!