我有一个 VideoView,我想在它被短按时调用一个方法fooMethod(VideoView vv)
,但如果它被长按,则显示/隐藏视频控件。但是,VideoView 似乎没有 OnClick 或 OnLongClick 事件。
我已经实现了 onTouchListener,但我似乎只能从中获取 DOWN 和 UP 事件;似乎不支持检测点击的长度。
在onTouchListener中有区分长短点击的好方法吗?
我有一个 VideoView,我想在它被短按时调用一个方法fooMethod(VideoView vv)
,但如果它被长按,则显示/隐藏视频控件。但是,VideoView 似乎没有 OnClick 或 OnLongClick 事件。
我已经实现了 onTouchListener,但我似乎只能从中获取 DOWN 和 UP 事件;似乎不支持检测点击的长度。
在onTouchListener中有区分长短点击的好方法吗?
这有点旧,但可以帮助将来遇到同样问题的任何人。
看起来 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);
}
});
尝试添加
<uses-features android:name="multi-touch" />
在你的 Manifest.xml