0
我有一个用编程创建的视图填充的线性布局。我已经实现了拖放代码(如下所示),这样如果我触及任何视图的右侧,它们将以拖动模式启动。拖动模式本身工作正常,但我遇到的问题是找到放置视图的位置,以便它落在预期位置。我在这里先向您的帮助表示感谢!如何通过拖放找到将物品放置在linearlayout中的位置?
这里是图(或多个)的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;
}
}