Android: Warum kann ich einem VideoView keinen onClickListener geben?

Lesezeit: 3 Minuten

Benutzer-Avatar
Fabian

Ich habe diese Codezeilen geschrieben:

 mVideoView = (VideoView) findViewById(R.id.video_view);
    mVideoView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.v("LOG_TAG, click");
        }
    });

Wenn ich jedoch meine Anwendung ausführe, wird das Click-Ereignis nie aufgerufen.

Ich frage mich also, ob es unmöglich ist, einen OnClickListener auf einem VideoView zu registrieren? Und wenn ja, warum ist das so?

  • mb muss anklickbaren Status setzen: wahr? mVideoView.setClickable(true);

    – Petrus

    30. Mai 2011 um 11:39 Uhr

Benutzer-Avatar
Neuentwicklung

verwenden VideoView.setOnTouchListener(..) es funktioniert für VideoView

Benutzer-Avatar
Dan

So habe ich das Anhalten/Wiedergeben von VideoViews mit onTouch gelöst:

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

  • Für diejenigen, wo resume() funktioniert nicht; Hier ist der Lösungsstapel

    – BlueSword

    25. Januar 2014 um 7:31 Uhr

  • Was ist der Zweck der Variable „bVideoIsBeingTouched“? Soweit ich sehen kann, schreiben Sie es nur um, aber Sie verwenden es nicht.

    – Jerry

    16. August 2017 um 9:34 Uhr

  • verwenden bVideoIsBeingTouched ist eine schreckliche Problemumgehung, die Sie erkennen sollten MotionEvent.ACTION_UP

    – AndrewBloom

    26. Februar 2020 um 15:53 ​​Uhr

Ich weiß, das ist alt, aber ich habe das hier verwendet:

    mVideoView.setOnTouchListener(new View.OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            Log.i(TAG, "Video 1 clicked, starting playback");

            return false;
        }
    });

  • Ich habe versucht, dieses Snippet zu verwenden, aber wenn ich darauf klicke, wird die Aktivität geschlossen und die App wird heruntergefahren.

    – vhbsouza

    6. August 2015 um 13:33 Uhr

  • Ja, das habe ich auch gemacht und jetzt funktioniert es bei mir.

    – José Ricardo Citerio Alcalá

    31. Januar 2017 um 0:00 Uhr

Ich weiß, das ist eine alte Frage, aber hier ist, was ich getan habe:

Da setOnClickListener nicht ausgelöst wird, habe ich meine eigene Klasse erstellt, die VideoView erweitert

public class VideoViewCustom extends VideoView{

und das onTouchEvent überschrieben

@Override
public boolean onTouchEvent(MotionEvent ev) {

    if(ev.getAction() == MotionEvent.ACTION_DOWN){
        Log.d(TAG, "ACTION_DOWN");
    }

    return super.onTouchEvent(ev);
}

und jetzt kann ich das onClick-Ereignis mit dem MotionEvent abrufen.

Hoffe das hilft jemandem!

Benutzer-Avatar
Michael M

Dies ist wahrscheinlich längst überfällig, dennoch eine Hilfe für diejenigen, die möglicherweise auf ein ähnliches Problem stoßen. Ich habe dieses Problem umgangen, indem ich eine transparente Bildansicht direkt über die Videoansicht legte, dann onClick-Ereignisse in der Bildansicht abhörte und danach mit der Videoansicht tat, was immer ich wollte.

Benutzer-Avatar
mszaro

Mir ist klar, dass dies eine alte Frage ist, aber ich dachte, ich würde mich mit einer einfachen Problemumgehung einmischen. Ich kann nicht antworten warum das funktioniert nicht – scheint meiner Meinung nach ein großes Versehen zu sein. Eine einfache Problemumgehung besteht jedoch darin, Ihre VideoView als einzige Ansicht in einem FrameLayout zu platzieren und einen OnClickListener für das Layout festzulegen. Nicht ideal, aber es funktioniert.

Benutzer-Avatar
Mouna

Sie können eine Schaltfläche verwenden, die in der Videoansicht transparent ist, wenn Sie möchten, dass ein bestimmter Teil des Videos bei Berührung etwas bewirkt.

1215190cookie-checkAndroid: Warum kann ich einem VideoView keinen onClickListener geben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy