3

我想用一个按钮实现两种不同的拖放交互。如果用户长按按钮,他可以移动按钮。这没问题,我实现了OnLongClickListener

@Override
public boolean onLongClick(View v) {
    ClipData dragData = ClipData.newPlainText(
            AbstractFragment.BUTTON_ID_TAG, "" + v.getId());
    DragShadowBuilder shadow = new DragShadowBuilder(v);
    v.startDrag(dragData, shadow, null, 0);
    return true;
}

如果用户触摸按钮并立即拖动,他可以从这个按钮画一条线到另一个按钮。我想我必须实现OnTouchListener接口,但我不确定识别此用户交互的条件。我需要哪个MotionEvent或更确切地说是哪个组合来识别这个输入。MotionEvent

我希望你能给我一些提示!

格茨瓦茨

4

1 回答 1

2

这是我的解决方案:

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_MOVE) {
        Toast.makeText(getActivity(), "onClick", Toast.LENGTH_LONG).show();
        ClipData dragData = ClipData.newPlainText(
                AbstractFragment.BUTTON_ID_TAG, "" + v.getId());
        DragShadowBuilder shadow = new CanvasDragShadow(v);
        v.startDrag(dragData, shadow, null, 0);
        return true;
    }
    return false;
}

我添加了这个方法,它有效。也许有必要检查MotionEvents 的历史以获得更好的用户体验。

于 2012-12-10T14:23:51.927 回答