1

我正在尝试创建一个自定义GridView,但我遇到了触摸监听器的问题。

我想做的事:

  • GridView使用自定义创建一个Views.
  • 长按一个项目,使其变为“可编辑”。
  • 水平或垂直拖动视图以移动它在GridView.

这是我遇到麻烦的地方:
我正在GestureDetector.OnGestureListener为 longpress 功能实现,因为由于某种原因,在覆盖自身时使用不起作用gridview.setOnItemLongClickListener()(我需要拖动部分)。所以此时一切都很好。现在我只需要知道长按何时完成。所以我虽然:“嗯,这应该不难。” 我大错特错了。我已经为此摆弄了很长一段时间,看起来使用不同的触摸事件对我没有帮助:/ 当我单步执行时,我注意到只给出了 1 个动作:。那我做错了什么?我需要...onTouchEvent()GridView
onTouchEvent()MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP

4

1 回答 1

2

找到罪魁祸首:

我正在做这样的事情

@Override
public boolean onTouchEvent(MotionEvent event) {

    // Give everything to the gesture detector
    boolean retValue = gestureDetector.onTouchEvent(event);

    switch (event.getAction()) {
        case MotionEvent.ACTION_MOVE :
            onMove();
            break;
        case MotionEvent.ACTION_UP :
            onUp();
            break;
        case MotionEvent.ACTION_CANCEL:
            onCancel();
            break;
    }
    return retValue;
}  

我认为retValue总是返回 false 所以没有触发其他事件。
这解决了问题:

@Override
public boolean onTouchEvent(MotionEvent event) {

    // Give everything to the gesture detector
    gestureDetector.onTouchEvent(event);

    switch (event.getAction()) {
        case MotionEvent.ACTION_MOVE :
            onMove();
            break;
        case MotionEvent.ACTION_UP :
            onUp();
            break;
        case MotionEvent.ACTION_CANCEL:
            onCancel();
            break;
    }
    return true;
}
于 2011-02-21T08:56:04.813 回答