Android 长按手势探测器也会在水龙头上点火
我试着实现这个问题中的代码:,但它总是检测到长按,即使我只是轻触它。我的代码如下(我扩展了Android 长按手势探测器也会在水龙头上点火,android,gesture,Android,Gesture,我试着实现这个问题中的代码:,但它总是检测到长按,即使我只是轻触它。我的代码如下(我扩展了ImageView,因为其中包含更多代码,与此问题无关): 正如我在评论中提到的,您应该区分onsingletaup()和onsingletaup()。使用替代注释是一种很好的做法 我有点困惑,因为你问题的标题似乎表明长时间的新闻报道也会触发点击事件,而你问题的文本则相反。也就是说,点击触发了一个长新闻事件。如果是后者,请尝试从onSingleTapUp()返回true。这适用于我使用SimpleGetSt
ImageView
,因为其中包含更多代码,与此问题无关):
正如我在评论中提到的,您应该区分
onsingletaup()
和onsingletaup()
。使用替代注释是一种很好的做法
我有点困惑,因为你问题的标题似乎表明长时间的新闻报道也会触发点击事件,而你问题的文本则相反。也就是说,点击触发了一个长新闻事件。如果是后者,请尝试从onSingleTapUp()
返回true。这适用于我使用SimpleGetStureListener
:
class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent event) {
//...
return super.onDown(event);
}
@Override
public boolean onSingleTapUp(MotionEvent event) {
//...
return true;
}
@Override
public void onLongPress(MotionEvent event) {
//...
super.onLongPress(event);
}
}
我希望它有帮助。您需要覆盖
onDown
,并使其返回true
。以下代码适用于我:
class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent event) {
// triggers first for both single tap and long press
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent event) {
// triggers after onDown only for single tap
return true;
}
@Override
public void onLongPress(MotionEvent event) {
// triggers after onDown only for long press
super.onLongPress(event);
}
}
解决方案有效(在onDown()
中返回true
)。我还通过在设置手势检测器之前将视图的clickable
和focusable
属性设置为true
,使其工作
val gestureDetectorCompat = GestureDetectorCompat(context, object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
// log "Single Tap Confirm"
return true
}
override fun onLongPress(e: MotionEvent?) {
// log "Long Press"
}
})
image_stateful.isClickable = true
image_stateful.isFocusable = true
image_stateful.setOnTouchListener { _, event -> gestureDetectorCompat.onTouchEvent(event) }
从onTouchEvent()@Eu.Dr返回false。没什么区别,我也尝试了这里的代码:但同样的问题。你的@Override注释在onLongPress和onsingletapp的哪里?这只是复制/粘贴失败?@Opiatefuchs-onsingletappup根本没有被激发。从Android文档中的示例来看,只有onDown
、onShowPress
和onLongPress
被激发。总是,不管我做什么手势。我现在正在开发一个使用视图
的onLongClickListener
的解决方案。无法启动onSingleTapUp,因为您没有覆盖它。而是在SingleTapUp上添加一个方法。注意最后一个字母(P)应该是小写,而您的字母是大写,这在JAVA中很重要。这就是@Opiatefuchs询问您覆盖注释的原因。如果您添加了它,编译器应该警告您实际上没有重写。它仍然会为我触发
val gestureDetectorCompat = GestureDetectorCompat(context, object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
// log "Single Tap Confirm"
return true
}
override fun onLongPress(e: MotionEvent?) {
// log "Long Press"
}
})
image_stateful.isClickable = true
image_stateful.isFocusable = true
image_stateful.setOnTouchListener { _, event -> gestureDetectorCompat.onTouchEvent(event) }