Подтвердить что ты не робот

Android: Почему я не могу дать onClickListener для VideoView?

Я написал эти строки кода:

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

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

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

4b9b3361

Ответ 1

use VideoView.setOnTouchListener(..) он работает для VideoView

Ответ 2

Вот как я решил приостановить/проиграть 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;
    }
});

Ответ 3

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

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

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

            return false;
        }
    });

Ответ 4

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

Так как 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.

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

Возможно, я сделал это с помощью 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();
            }
        }
    });