Android: почему я не могу дать onClickListener для VideoView? - PullRequest
59 голосов
/ 30 мая 2011

Я написал следующие строки кода:

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

Однако, когда я запускаю свое приложение, событие щелчка никогда не вызывается.

Поэтому мне интересно, нельзя ли зарегистрироваться?OnClickListener на VideoView?И если так, то почему?

Ответы [ 10 ]

79 голосов
/ 30 июня 2011

использовать VideoView.setOnTouchListener(..) это работает для VideoView

16 голосов
/ 04 января 2013

Вот как я решил паузу / воспроизведение VideoViews с помощью 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;
    }
});
14 голосов
/ 13 августа 2013

Я знаю, что это старый вопрос, но вот что я сделал:

Поскольку setOnClickListener не запускается, я создал свой собственный класс, который расширяет VideoView

public class VideoViewCustom extends VideoView{

и переопределил onTouchEvent

@Override
public boolean onTouchEvent(MotionEvent ev) {

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

    return super.onTouchEvent(ev);
}

и теперь я могу получить событие onClick с MotionEvent.

Надеюсь, это кому-нибудь поможет!

14 голосов
/ 05 января 2013

Я знаю, что это старый, но я использовал это:

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

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

            return false;
        }
    });
2 голосов
/ 13 марта 2015

Я понимаю, что это старый вопрос, но подумал, что я бы вмешался с простым обходным путем. Я не могу ответить , почему это не работает - на мой взгляд, это большая упущенность. Но простой способ обойти это - поместить VideoView в качестве единственного View внутри FrameLayout и установить OnClickListener на макете. Не идеально, но работает.

2 голосов
/ 10 апреля 2012

Это, вероятно, давно пора, тем не менее, некоторой помощи тем, кто может столкнуться с подобной проблемой.Чтобы обойти эту проблему, я положил прозрачное представление изображения прямо поверх просмотра видео, затем прослушал события onClick в представлении изображения и затем сделал все, что хотел, с просмотром видео.

1 голос
/ 09 ноября 2013

Вы можете использовать прозрачную кнопку для просмотра видео, если вы хотите, чтобы определенная часть видео касалась чего-либо.

0 голосов
/ 05 июня 2012

Возможно, я сделал это с помощью onSetClickListener.А вот код вашей помощи:

mVideoView.setOnClickListener(new View.OnClickListener() {
    @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //Here you put a condition for playing a video when you click on your video view.//
            if(my_video.isPressed())
            {   
                my_video.start();
            } else {
                Toast.makeText(getApplicationContext(), 
                    "Not able to run This Video!", 
                    Toast.LENGTH_LONG).show();
            }
        }
    });
0 голосов
/ 30 июня 2011

Вы можете попробовать Вид наложения жестов

Вы должны иметь возможность накладывать это представление поверх другого представления для получения событий касания.

Надеюсь, это поможет!

0 голосов
/ 30 мая 2011

VideoView - это оболочка, содержащая mdeiaplayer и surfaceView.Вы можете взаимодействовать с помощью MediaController или писать свой собственный SurfaceView и реализовывать события onClick.

...