我目前正在尝试在Android中实施拖放功能。应该对ListView中的项目进行绘制。问题是这个ListView中的元素(项目)在被触摸(单个录制)时应该有某种动作,并且在用户对其中一个项目进行长按之后它们应该是可拖动的。我从教程中得到了代码,但我无法解决的问题是: 在用户将手指放在ListView上的项目之后,onTouch(MotionEvent ev)在开始时和第二个GestureDetector.onLongPress被调用之后被调用。 我的绘制逻辑是在onTouch方法中实现的。我目前所做的是在启用LongPress后将boolean(isLongPressed)设置为true,并在onTouch方法中检查此布尔值是否为true - 如果是,则执行draging。
这是我的代码:
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”但是如果我开始拖动我什么也得不到。如果我松开手指然后开始拖动,一切都还可以,但我希望能够在注册长按后立即拖动。