Android OnLongClickListener don';t工作
我有一个拖放代码。如果用户触摸该项,Android OnLongClickListener don';t工作,android,ontouchlistener,onlongclicklistener,Android,Ontouchlistener,Onlongclicklistener,我有一个拖放代码。如果用户触摸该项,OnTouchListener 代码开始: View.OnTouchListener dragListener = new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { // start move on a touch event if (motionEvent.get
OnTouchListener
代码开始:
View.OnTouchListener dragListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// start move on a touch event
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
// API 24
// view.startDragAndDrop(data, shadowBuilder, view, View.DRAG_FLAG_GLOBAL); // API 24
view.setVisibility(View.VISIBLE);
return true;
}
return false;
}
};
但是我的代码上会有一个onlongclicklister
。如果该项目被用户按住(长时间单击),则屏幕上将显示toast消息:
homebutton.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View arg0) {
Toast.makeText(UserArea.this, "laaaange geklickt", Toast.LENGTH_SHORT).show();
return true;
}
});
但它不起作用:-(从侦听器返回false)
View.OnTouchListener dragListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//your logic
return false;
}
};
否则,您的事件将被视为已完成从侦听器返回false
View.OnTouchListener dragListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//your logic
return false;
}
};
否则,您的事件将被视为已完成编辑您的触摸事件,并根据阈值决定触摸或长按
private float mDownX;
private float mDownY;
private final float SCROLL_THRESHOLD = 10;
private boolean isOnClick;
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getY();
isOnClick = true;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (isOnClick) {
Log.i(LOG_TAG, "onClick ");
//TODO onClick code
}
break;
case MotionEvent.ACTION_MOVE:
if (isOnClick && (Math.abs(mDownX - ev.getX()) > SCROLL_THRESHOLD || Math.abs(mDownY - ev.getY()) > SCROLL_THRESHOLD)) {
Log.i(LOG_TAG, "movement detected");
isOnClick = false;
}
break;
default:
break;
}
return true;
}
编辑触摸事件,并根据阈值决定触摸或长按
private float mDownX;
private float mDownY;
private final float SCROLL_THRESHOLD = 10;
private boolean isOnClick;
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getY();
isOnClick = true;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (isOnClick) {
Log.i(LOG_TAG, "onClick ");
//TODO onClick code
}
break;
case MotionEvent.ACTION_MOVE:
if (isOnClick && (Math.abs(mDownX - ev.getX()) > SCROLL_THRESHOLD || Math.abs(mDownY - ev.getY()) > SCROLL_THRESHOLD)) {
Log.i(LOG_TAG, "movement detected");
isOnClick = false;
}
break;
default:
break;
}
return true;
}
您的dargListener是否也设置了homeButton?如果您的dargListener设置了homeButton,那么您应该从if(motionEvent.getAction()==motionEvent.ACTION_DOWN){return false;}条件返回false;}对不起,我不知道,“dragListener也设置了homeButton”是什么意思:-(你的dargListener也设置了homeButton吗?如果你也设置了homeButton,那么你应该从if返回false(motionEvent.getAction()==motionEvent.ACTION_DOWN){return false;}条件抱歉,我不知道,“dragListener也设置了homeButton”是什么意思:-(findViewById(R.id.homeButton).setOnTouchListener(dragListener);处理onTouchEvent后-如果返回true,则返回true不会在层次结构中进一步传播触摸事件,该事件将被视为已消费。只有返回false,它才会传播触摸事件。好的,我已将return设置为false。但代码不起作用。我只能拖放imgBtn,但不要单击:-(如果删除行“findViewById(R.id.imgBtnItem1).setOnTouchListener(dragListener);”按钮是可点击的,但我不能使用拖放,请检查如何覆盖触摸移动和检测longClickfindViewById(R.id.homebutton).setOnTouchListener(dragListener);处理onTouchEvent后-如果返回true,则返回true不会在层次结构中进一步传播触摸事件,该事件将被视为已消费。只有返回false,它才会传播触摸事件。好的,我已将return设置为false。但代码不起作用。我只能拖放imgBtn,但不要单击:-(如果删除行“findViewById(R.id.imgBtnItem1).setOnTouchListener(dragListener);”按钮是可点击的,但我不能使用拖放。请检查如何覆盖触摸和检测长点击。这是一个字符串变量。您必须定义私有静态最终字符串日志。\u TAG=私有静态最终字符串日志\u TAG=UserArea;/I错误:应为表达式:-(“UserArea”是我的类名private static final String LOG_TAG=“UserArea”字符串应该用引号表示是的!它可以运行!非常感谢;-)这是一个字符串变量您必须定义private static final String LOG_TAG=private static final String LOG_TAG=UserArea;/I得到一个错误:表达式应为-(“UserArea”是我的类名private static final String LOG_TAG=“UserArea”字符串应该在quotesYEAH!它会运行!非常感谢;-)