我有一个拖放代码。如果用户触摸该项目,则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;
}
};但是我的代码上会有一个OnLongClickListener。如果用户持有该项目(长时间单击),则会在显示器上显示祝酒词:
homebutton.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View arg0) {
Toast.makeText(UserArea.this, "laaaange geklickt", Toast.LENGTH_SHORT).show();
return true;
}
});但这不管用-
发布于 2016-09-06 17:03:19
编辑您的触摸事件,并根据阈值确定Touch或Long Press
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;
}发布于 2016-09-06 15:20:42
从听者处返回false
View.OnTouchListener dragListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//your logic
return false;
}
};否则您的事件将被视为已完成。
https://stackoverflow.com/questions/39278501
复制相似问题