Android 如何检测双击?
Android How to detect double tap?
我正在尝试在 android 的 DoubleTap
上刷新 Canvas
。我在自定义 View
.
中使用 GestureDetector
final GestureDetector mDetector = new GestureDetector(
getContext(), new GestureDetector.OnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
invalidate();
return true;
}
}
但是我收到了错误
The method onDoubleTap(MotionEvent) of type new
GestureDetector.OnGestureListener(){} must override or implement a
supertype method
和
Remove '@Override' annotation
解决方案。我删除覆盖并收到此警告
The method onDoubleTap(MotionEvent) from the type new
GestureDetector.OnGestureListener() {} is never used locally.
然后我尝试测试这是否有效,并创建了一个函数来在我 DoubleTap
时更改 TextView
字符串。没有任何反应。
我也查看了 GestureDetector Reference 的解释,但他们甚至没有 DoubleTap
那里,每个人都使用。我该怎么办?
试试这个
final GestureDetector mDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return true;
}
});
对于那些想知道如何将它也设置为相应视图的人:
final GestureDetector gDetector = new GestureDetector(getBaseContext(), new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
doIt();
return true;
}
});
// Set it to the view
mButton.setOnTouchListener((v, event) -> gDetector.onTouchEvent(event));
我解决这个问题的方法是不同的,因为我也需要为 onClick 侦听器执行一些操作,而且它是在列表视图中,所以我需要知道项目内容是什么。
这是我使用 kotlin Job 的方法:
在 class 的顶部,我声明了如下内容:
private var doubleTapTimerJob: Job = Job()
private var clickedViewItem: CartViewItem? = null
val DOUBLE_TAP_DELAY = 200L
其中 CartViewItem 是列表中使用的模型。
这是我的 onClickListener 逻辑:
if (clickedViewItem == null || clickedViewItem != cartViewItem) {
doubleTapTimerJob.cancel()
doubleTapTimerJob = lifecycleScope.launch {
delay(DOUBLE_TAP_DELAY)
clickedViewItem = null
}
clickedViewItem = cartViewItem
onClicked(cartViewItem)
} else {
onDoubleClicked(cartViewItem)
clickedViewItem = null
doubleTapTimerJob.cancel()
}
这里我等待第二次点击 200 毫秒,如果没有发生,我会将 clickedViewItem 设置为 null,因此它不再有效
我正在尝试在 android 的 DoubleTap
上刷新 Canvas
。我在自定义 View
.
GestureDetector
final GestureDetector mDetector = new GestureDetector(
getContext(), new GestureDetector.OnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
invalidate();
return true;
}
}
但是我收到了错误
The method onDoubleTap(MotionEvent) of type new GestureDetector.OnGestureListener(){} must override or implement a supertype method
和
Remove '@Override' annotation
解决方案。我删除覆盖并收到此警告
The method onDoubleTap(MotionEvent) from the type new GestureDetector.OnGestureListener() {} is never used locally.
然后我尝试测试这是否有效,并创建了一个函数来在我 DoubleTap
时更改 TextView
字符串。没有任何反应。
我也查看了 GestureDetector Reference 的解释,但他们甚至没有 DoubleTap
那里,每个人都使用。我该怎么办?
试试这个
final GestureDetector mDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return true;
}
});
对于那些想知道如何将它也设置为相应视图的人:
final GestureDetector gDetector = new GestureDetector(getBaseContext(), new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
doIt();
return true;
}
});
// Set it to the view
mButton.setOnTouchListener((v, event) -> gDetector.onTouchEvent(event));
我解决这个问题的方法是不同的,因为我也需要为 onClick 侦听器执行一些操作,而且它是在列表视图中,所以我需要知道项目内容是什么。 这是我使用 kotlin Job 的方法: 在 class 的顶部,我声明了如下内容:
private var doubleTapTimerJob: Job = Job()
private var clickedViewItem: CartViewItem? = null
val DOUBLE_TAP_DELAY = 200L
其中 CartViewItem 是列表中使用的模型。 这是我的 onClickListener 逻辑:
if (clickedViewItem == null || clickedViewItem != cartViewItem) {
doubleTapTimerJob.cancel()
doubleTapTimerJob = lifecycleScope.launch {
delay(DOUBLE_TAP_DELAY)
clickedViewItem = null
}
clickedViewItem = cartViewItem
onClicked(cartViewItem)
} else {
onDoubleClicked(cartViewItem)
clickedViewItem = null
doubleTapTimerJob.cancel()
}
这里我等待第二次点击 200 毫秒,如果没有发生,我会将 clickedViewItem 设置为 null,因此它不再有效