我目前正在尝试在 Android 中实现拖放。应该对 ListView 中的项目进行拖动。问题是这个 ListView 中的元素(项目)在被触摸(单条录音)时应该有某种动作,并且在用户长按其中一个项目后它们应该是可拖动的。我从教程中获得了用于拖动的代码,但我无法解决的问题是:用户将手指放在 ListView 中的项目上后,在开始时调用 onTouch(MotionEvent ev),然后调用第二个 GestureDetector.onLongPress . 我的拖动逻辑是在 onTouch 方法中实现的。我目前所做的是在启用 LongPress 后将布尔值 (isLongPressed) 设置为 true,并在 onTouch 方法中检查该布尔值是否为 true - 如果是,则执行拖动。
这是我的代码:
public class DragNDropListView extends ListView implements GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener
{
private boolean isLongPressed
@Override
public boolean onTouchEvent(MotionEvent ev)
{
mGestureDetector.onTouchEvent(ev);
if (!isLongPressed)
{
Log.e("Not Long", "Its Not Longpressed yet");
return super.onTouchEvent(ev);
}
final int action = ev.getAction();
final int x = (int) ev.getX();
final int y = (int) ev.getY();
if (action == MotionEvent.ACTION_DOWN && isLongPressed)
{
mDragMode = true;
}
if (!mDragMode)
return super.onTouchEvent(ev);
switch (action)
{
case MotionEvent.ACTION_DOWN:
Log.e("Action down", "Down");
break;
case MotionEvent.ACTION_MOVE:
Log.e("ACTION MOVE", "Move");
drag()
break;
case MotionEvent.ACTION_UP:
{
isLongPressed = false;
}
}
@Override
public void onLongPress(MotionEvent ev)
{
Log.e("LongPress", "LongPressed");
isLongPressed = true;
mGestureDetector.setIsLongpressEnabled(isLongPressed);
super.onTouchEvent(ev);
}
发生的情况是,如果我只是选择项目(期望的行为),我会得到“isNotLongPressed”,长按后我会得到“LongPressed”,但是如果我开始拖动,我什么也得不到。如果我松开手指然后开始拖动一切正常,但我希望能够在长按注册后立即拖动。