【问题标题】:onTouchListener not workingonTouchListener 不工作
【发布时间】:2011-06-08 13:55:39
【问题描述】:

我的活动中有以下代码。在我的 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;
            }
        });

编辑: 我意识到上面的代码确实有效。日食中的某些东西弄乱了 LogCat。重新启动 eclipse 后,LogCat 打印第一个日志“onTouch 输入”。但是,没有打印“ACTION_UP”。我将 MotionEvent 更改为 MotionEvent.ACTION_DOWN,现在 LogCat 打印出来了。为什么ACTION_DOWN 有效而ACTION_UP 无效?

【问题讨论】:

  • 这些视图是否显示在您的活动中?
  • 布局的“clicable”属性是否设置为true?
  • @woodshy 添加 clickable=true 没有做任何事情
  • @dmon 是的,我正在一个 VideoView vvLive 内播放视频,该视频位于 LinearLayout linearLayoutLiveVideo 内。当用户触摸正在播放的视频时,我想执行一些操作。

标签: android ontouchlistener


【解决方案1】:

ACTION_UP 永远不会发送给您的侦听器,因为您返回 false,因此不要“消费”该事件。返回 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 怎么样。我还能用吗?
    • 是的,您必须使用该行。按照我给出的替换它下面的行并尝试一下。
    • Error: The type new View.OnTouchListener(){} must implement the inherited abstract method View.OnTouchListener.onTouch(View, MotionEvent)。看起来我不能将 onTouchListner 与 onTouchEvent 一起使用?
    • onTouchEvent 不在片段中
    【解决方案3】:

    我遇到了这个问题,解决方案是:-

    1-在您的 xml 中将以下属性设置为 VideoView

    android:clickable="true"

    2- 只需在您的代码集中 setOnClickListener 到 VideoView,它就会像魅力一样工作:

    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);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多