Android:在LongClick和onTouch上执行不同的拖放操作

时间:2012-12-05 17:15:32

标签: android drag-and-drop ontouchlistener onlongclicklistener motionevent

我想用一个Button实现两个不同的Drag和Drop交互。如果用户点击按钮上的长按,他可以移动按钮。这不是问题,我实施了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接口,但我不确定识别此用户交互的条件。 <{1}}或更确切地说MotionEvent的哪个组合需要识别此输入。

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

grtz warci

1 个答案:

答案 0 :(得分: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;
}

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