Android 安卓:为什么可以';我不能给一个听众一个视频视图吗?

Android 安卓:为什么可以';我不能给一个听众一个视频视图吗?,android,android-videoview,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"); } }); 但是,当我运行我的

我已经编写了以下几行代码:

 mVideoView = (VideoView) findViewById(R.id.video_view);
    mVideoView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.v("LOG_TAG, click");
        }
    });
但是,当我运行我的应用程序时,不会调用click事件


所以我想知道,在视频视图上注册OnClick侦听器是不可能的吗?如果是这样,为什么会这样呢?

视频视图是一个包含mdeiaplayer和surfaceView的包装。您可以通过MediaController与交互,也可以编写自己的SurfaceView并实现onClick事件。

使用
VideoView。setOnTouchListener(…)
它适用于VideoView

您可以尝试

public class VideoViewCustom extends VideoView{
您应该能够将此视图覆盖在另一个视图上,以便获得触摸事件


希望这有帮助

这可能早就应该做了,不过对那些可能遇到类似问题的人来说还是有些帮助的。我解决这个问题的方法是在视频视图的正上方放置一个透明的图像视图,然后在图像视图上听onClick事件,然后在视频视图上做我想做的任何事情。

我可能已经用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();
            }
        }
    });

下面是我如何使用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;
    }
});

我知道这个很旧,但我用过这个:

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

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

            return false;
        }
    });

我知道这是一个古老的问题,但以下是我所做的:

因为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);
}
现在我可以用MotionEvent获取onClick事件


希望这对别人有帮助

如果您想在触摸屏上观看视频的特定部分,可以使用视频视图上透明的按钮

我意识到这是一个老问题,但我想我应该加入一个简单的解决方法。我无法回答为什么这不起作用——在我看来,这似乎是一个很大的疏忽。但一个简单的解决方法是将视频视图作为FrameLayout中的唯一视图,并在布局上设置OnClickListener。不太理想,但它可以工作。

您可以通过封面布局解决此问题。 我用了线性布局

            <LinearLayout
                android:id="@+id/video1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center">
                <VideoView
                    android:id="@+id/video2"
                    android:layout_width="370dp"
                    android:layout_height="180dp"
                    android:layout_gravity="center"
                    app:elevation = "0dp"
                    android:background="@mipmap/video"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:visibility="visible"
                    />

            </LinearLayout>

mb需要设置可点击状态:真?mVideoView.setClickable(真);伙计,这正是警察说他在做的!关键是,当播放视频时,它不起作用。一般来说,“点击”的触摸事件应该只在动作开始时使用,而不是动作结束时使用,以允许用户表达点击的意图。这就是为什么还有其他类似“取消行动”的活动存在。用户开始按,然后将指针移到视图边界之外。Dallas是对的,应该是ACTION_UP而不是ACTION_DOWN。我刚刚遇到这个问题,我同意ACTION_UP通常是更好的练习,但在这种情况下,VideoView似乎只提供ACTION_DOWN!我发现同样的情况,它只对那些
resume()
不起作用的人使用down;以下是解决方案“bvideoisbeingtouch”变量的用途是什么?据我所知,你只是在重写它,但你没有使用它。使用
b视频被触摸
是一种可怕的解决方法,你应该检测
MotionEvent。动作_UP
虽然这个链接可以回答问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面更改,只有链接的答案可能会无效。哦。我写这篇文章时还是个新手:)我试着使用这个片段,但当我点击时,活动关闭,应用程序关闭。是的,我做了同样的事情,它现在对我有效。