Android:为什么我不能将onClickListener赋予VideoView?

Fab*_*ian 59 android android-videoview

我写了这些代码行:

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

但是,当我运行我的应用程序时,从不调用click事件.

所以我想知道,在VideoView上注册OnClickListener是不可能的?如果是这样,为什么会这样呢?

new*_*dev 80

使用VideoView.setOnTouchListener(..)它适用于VideoView


Dan*_*Dan 16

以下是我使用onTouch解决VideoViews暂停/播放的方法:

// 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;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 对于那些`resume()`不起作用的人;这是解决方案[堆栈](http://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCkQFjAA&url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F11960730 %2Fresume-playing-video-from-onresume&ei = JmbjUqmGK8P9rAe29IDYBA&usg = AFQjCNHWIPXnoKBCfV4ctFukFPDXYl303g&sig2 = NJyXl7J9j8FA3AOBEmIXow&bvm = bv.59930103 (2认同)

naw*_*rus 15

我知道这是旧的,但我用过这个:

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

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

            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)


小智 15

我知道这是老问题,但这就是我所做的:

由于没有触发setOnClickListener,我创建了自己的类,扩展了VideoView

public class VideoViewCustom extends VideoView{
Run Code Online (Sandbox Code Playgroud)

并覆盖了onTouchEvent

@Override
public boolean onTouchEvent(MotionEvent ev) {

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

    return super.onTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)

现在我可以使用MotionEvent获取onClick事件.

希望这有助于某人!

  • 通常,"click"的触摸事件应仅在ACTION_UP上使用,而不是在ACTION_DOWN上使用,以允许用户表达单击意图.这就是ACTION_CANCEL等其他事件存在的原因.用户开始按,然后将其指针移动到视图的边界之外. (8认同)
  • 我刚刚遇到这个问题,我同意ACTION_UP通常是更好的做法,但在这种情况下,VideoView似乎只提供ACTION_DOWN! (4认同)

nah*_*ang 1

VideoView 是包含 MediaPlayer 和 SurfaceView 的包装器。您可以通过 MediaController 进行交互或编写自己的 SurfaceView 并实现 onClick 事件。