Android:限制拖动;一滴物体

时间:2014-02-18 00:02:21

标签: java android drag-and-drop motionevent

我有一个活动。在这个活动上,我有一个相对布局。在这个布局上,我从一个扩展RelativeLayout的类中放置了几个自定义对象 它有点像棋盘(它不是,但所以你知道我在说什么) 我现在希望能够触摸其中一个对象并将其拖动到4个相邻字段中的一个,将其与那个字段交换。 我认为最简单的方法是使用androids drag&下降。

我为每个对象使用了setOnTouchListener和setOnDragListener,因此可以触摸每个对象并将其拖动到另一个对象上。
我使用this教程,应该比阅读代码更容易阅读,但这里是:

    @Override
public boolean onTouch(View v, MotionEvent e) {
    if (e.getAction() == MotionEvent.ACTION_DOWN) {
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
            v.startDrag(null, shadowBuilder, v, 0);
        return true;
    } else {
        return false;

    }
}

@Override
public boolean onDrag(View v, DragEvent e) {
    if (e.getAction()==DragEvent.ACTION_DROP) {
        View view = (View) e.getLocalState();
        ViewGroup from = (ViewGroup) view.getParent();
        from.removeView(view);
        MyCustomViewClass to = (MyCustomViewClass) v;
        to.addView(view);
        view.setVisibility(View.VISIBLE);
    }
    return true;
}

现在我想知道如何限制物体掉落的位置。我希望它能够被移动到4个相邻的字段(不仅通过限制draglistener,我也不希望对象移动到这个对象之外,无论手指试图拖动多远)。
我希望你明白我的意思,如果不是,请问 所以这个问题就是我可以用这个拖拽和放大器做些什么。我猜。是否有可能以某种方式检测手指在下降之前的位置?是否可以将拖动限制为直线x和y轴?或者有没有办法知道拖动运动的方向,允许我1)知道我要交换的对象和2)在放置之前移动另一个对象,使它看起来像对象只是交换?

修改 我得到了方向,因为我可以从view.getX计算出来,view.getY(坐标在我的开始对象中)和v.getXv.getY(来自对象的坐标我已经结束了) )当dragEvent为ACTION_ENTERED时,在onDrag中 现在我试着弄清楚如何将dragshadows位置设置为我希望它结束​​的对象,或者只允许在我的方向上拖动并结束对下一个对象的拖动。
进一步的帮助或想法仍然赞赏。

0 个答案:

没有答案