在MotionEvent.ACTION_MOVE上限制两个其他人之间的视图移动

时间:2017-12-22 08:49:10

标签: android touch draggable

我想在手指下移动视图,并且我希望它始终保持在两个视图之间的高度范围内。

考虑一下:

___________________________
|                          |
|            A             |
|__________________________|

           _____
           |_o_|

___________________________
|                          |
|            B             |
|__________________________|

我希望视图“o”在“A”和“B”之间垂直移动。

问题是在移动时似乎没有触发ACTION_MOVE所以我的if语句检查未调用的范围所以如果你快速移动o视图超出范围然后ACTION_MOVE触发并查看o卡在一些超出范围的地方。 我怎么能这样做。

我的代码片段:

    public boolean onTouch(View view, MotionEvent motionEvent) {
        BeadView beadView = (BeadView) view;
        Rect parentRect = new Rect();
        Rect beadRect = new Rect();
        ((LinearLayout) beadView.getParent()).getGlobalVisibleRect(parentRect);
        beadView.getGlobalVisibleRect(beadRect);
        switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {

            case MotionEvent.ACTION_DOWN:
                dy = - Math.abs(beadView.getY() - motionEvent.getRawY());
                break;
            case MotionEvent.ACTION_MOVE:

                if ((beadRect.bottom < parentRect.bottom) &&
                        beadRect.top > parentRect.top) {
                    beadView.animate()
                            .y(motionEvent.getRawY() + dy)
                            .setDuration(0).
                            start();
                }
                break;
        }
        return true;
    }

有什么建议吗?

0 个答案:

没有答案