1

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

4

0 回答 0