在onLongPress之后Android触发onTouch

时间:2013-09-11 08:30:56

标签: android drag-and-drop gesturedetector

我目前正在尝试在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”但是如果我开始拖动我什么也得不到。如果我松开手指然后开始拖动,一切都还可以,但我希望能够在注册长按后立即拖动。

0 个答案:

没有答案