0

我有一个 VideoView,我想在它被短按时调用一个方法fooMethod(VideoView vv),但如果它被长按,则显示/隐藏视频控件。但是,VideoView 似乎没有 OnClick 或 OnLongClick 事件。

我已经实现了 onTouchListener,但我似乎只能从中获取 DOWN 和 UP 事件;似乎不支持检测点击的长度。

在onTouchListener中有区分长短点击的好方法吗?

4

2 回答 2

1

这有点旧,但可以帮助将来遇到同样问题的任何人。

看起来 VideoView 将 onClick/onLongClick 用于其他功能(没有对其进行足够深入的研究),因此另一种方法是使用 GestureDetectorCompat(compat,因此它适用于旧版本)手动完成。

GestureDetectorCompat

GestureDetectorCompat gestureDetectorCompat =  new GestureDetectorCompat(context, new GestureDetector.OnGestureListener() {
        @Override
        public boolean onDown(MotionEvent motionEvent) {
              /* Always return true, to indicate that the gestureDetectorCompat
               * consumed the touch and can continue to the  
               * next gestures(long, single, etc..)
               */
            return true;
        }

        @Override
        public void onShowPress(MotionEvent motionEvent) {

        }

        @Override
        public boolean onSingleTapUp(MotionEvent motionEvent) {
            return false;
        }

        @Override
        public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
            return false;
        }

        @Override
        public void onLongPress(MotionEvent motionEvent) {
            Log.i("SOME_TAG", "Longpress detected");
        }

        @Override
        public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
            return false;
        }
    });

您要实现 onClick/onLongClick 的视图。

看法

view.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            // Return the result from GestureDetectorCompat so the view
            // knows if the touch was consumes or not
            return gestureDetectorCompat.onTouchEvent(motionEvent);
        }
    });
于 2019-12-11T10:13:09.160 回答
0

尝试添加

<uses-features android:name="multi-touch" />

在你的 Manifest.xml

于 2017-02-04T11:19:26.283 回答