64 votes

Android: Pourquoi ne puis-je pas attribuer un onClickListener à un VideoView?

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?

85voto

newdev Points 492

utilisez VideoView.setOnTouchListener(..) cela fonctionne pour VideoView

18voto

Dan Points 404

Voici comment j'ai résolu la pause / lecture de VideoViews à l'aide de 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;
    }
});
 

15voto

Larry Mustaine Points 36

Je sais que c’est une question ancienne, mais voici ce que j’ai fait:

Comme setOnClickListener n’a pas été 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!

15voto

nawlrus Points 171

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;
        }
    });
 

2voto

Michael M Points 41

C’est probablement 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, puis fait ce que je voulais faire par la suite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X