【问题标题】:How to find where to place item in linearlayout with drag and drop?如何通过拖放找到将项目放置在线性布局中的位置?
【发布时间】:2015-12-21 21:01:09
【问题描述】:

我有一个线性布局,里面充满了以编程方式创建的视图。我已经实现了拖放代码(如下所示),因此如果我在任何视图的右侧触碰,它们就会以拖动模式开始。拖动模式本身工作正常,但我遇到的问题是找出将视图放置在释放位置的位置,以便它落在预期的位置。我在这里先向您的帮助表示感谢!

这是视图的 onTouchMethod:

view.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        switch (event.getAction()) {
                            case MotionEvent.ACTION_DOWN:
                                if (Math.round(event.getX()) >= 720) {
                                    ClipData data = ClipData.newPlainText("", "");
                                    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                                    v.startDrag(data, shadowBuilder, v, 0);
                                    v.setVisibility(View.INVISIBLE);
                                    return true;
                                } else {
                                    return false;
                                }
                            default:
                                return false;
                        }
                    }
                });

这里也是放置在视图上的 onDragMethod:

view.setOnDragListener(new View.OnDragListener() {
                @Override
                public boolean onDrag(View v, DragEvent event) {
                    View view = (View) event.getLocalState();
                    switch (event.getAction()) {
                        case DragEvent.ACTION_DRAG_STARTED:
                            break;
                        case DragEvent.ACTION_DROP:
                            LinearLayout owner = (LinearLayout) view.getParent();
                            owner.removeView(view);
                            owner.addView(view, getNewViewPosition(fillView.indexOfChild(v), Math.round(v.getY()), Math.round(event.getY())));
                            view.setVisibility(View.VISIBLE);
                            break;
                    }
                    return true;
                }
            });

最后是getNewViewPosition方法:

public int getNewViewPosition(int currentPosition, int stationaryY, int floatingY) {
        Toast.makeText(this, stationaryY + " and then " + floatingY, Toast.LENGTH_SHORT).show();
        if (floatingY - stationaryY <= 15) {
            return currentPosition - 1;
        } else {
            return currentPosition + 1;
        }
    }

【问题讨论】:

    标签: java android drag-and-drop android-linearlayout


    【解决方案1】:

    我想通了,因为我知道我的视图高度为 52,所以我能够制定以下代码:

    public int getNewViewPosition(int currentPosition, int stationaryY, int floatingY) {
            if (floatingY - stationaryY >= 13) {
                return currentPosition - 1;
            } else if (floatingY - stationaryY <= 39) {
                return currentPosition + 1;
            } else
                return currentPosition;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多