onTouchListener不起作用

16

我在我的活动中有以下代码。在我的 xml 中,视频视图位于线性布局内。但是,当点击视图时,onTouchListener 没有触发。我尝试将 onTouchListener 更改为 vvLive,但什么也没发生。我还尝试将 onTouchListener 更改为 onClickListener,但也没有效果。有人知道监听器为什么不起作用吗?谢谢。

        private VideoView vvLive;
        LinearLayout linearLayoutLiveVideo;

        linearLayoutLiveVideo.setOnTouchListener(new OnTouchListener(){
            public boolean onTouch(View v, MotionEvent event){
                Log.d(TAG, "onTouch entered");
                if(event.getAction() == MotionEvent.ACTION_UP) {
                    Log.d(TAG, "ACTION_UP");

                }
                return false;
            }
        });

编辑:我意识到上面的代码实际上是有效的。Eclipse中的某些东西搞乱了LogCat。在我重启Eclipse之后,LogCat打印了第一个日志“onTouch entered”。然而,“ACTION_UP”没有被打印出来。我将MotionEvent更改为MotionEvent.ACTION_DOWN,现在LogCat可以打印了。为什么ACTION_DOWN有效而ACTION_UP无效?


这些视图是在您的活动中显示的吗? - dmon
布局的“clicable”属性设置为true了吗? - woodshy
@woodshy 添加 clickable=true 没有起到任何作用。 - yellavon
@dmon 是的,我正在 VideoView vvLive 中播放视频,它位于 LinearLayout linearLayoutLiveVideo 中。当用户触摸正在播放的视频时,我想执行一些操作。 - yellavon
3个回答

37

由于您返回了 false 并且没有“消耗”事件,因此 ACTION_UP 没有被发送到您的监听器。返回 true,您将获得起始事件(ACTION_DOWN)以及所有后续事件(ACTION_MOVE,然后是 ACTION_UP)。


2

将您的代码修改为以下内容并尝试:

@Override
public boolean onTouchEvent(MotionEvent event) {
    Log.d(TAG, "onTouch entered");
    if(event.getAction() == MotionEvent.ACTION_UP) {
        Log.d(TAG, "ACTION_UP");
        return super.onTouchEvent(event);
    else
        return false;
}

关于 setOnTouchListener 怎么样?我仍然可以使用吗? - yellavon
是的,你必须使用那一行。将其下面的行替换为我给出的内容并尝试它。 - Andro Selva
2
错误:类型 new View.OnTouchListener(){} 必须实现继承的抽象方法 View.OnTouchListener.onTouch(View, MotionEvent)。看起来我不能在 onTouchEvent 中使用 onTouchListner? - yellavon
onTouchEvent 不在 fragment 中 - Vishal Patel

1
我遇到了这个问题,解决方法如下:
1- 在你的xml文件中为VideoView设置以下属性:
android:clickable="true"
2- 简单地在你的代码中为VideoView设置setOnClickListenerto监听器,它就会像魔法一样工作:
videoView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent(CinemaDetailsActivity.this , FullScreenPlayerActivity.class);
        intent.putExtra("url" ,  getIntent().getStringExtra("url"));
        startActivity(intent);
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接