我有2个EditText,我希望能够拖放到我的屏幕上。我现在遇到的问题是,它们拖动得很好 - 但是当拖动被释放时,而不是被放弃,EditText消失。无法拖放元素(在释放拖动时消失)
我设置的听众喜欢这样的:
//etUsername and etPartnerName are the EditText's I want to make draggable
etUsername.setOnTouchListener(new MyTouchListener());
etUsername.setOnDragListener(new MyDragListener());
etPartnerName.setOnTouchListener(new MyTouchListener());
etPartnerName.setOnDragListener(new MyDragListener());
在同一个片段,我有听众的类:
private final class MyTouchListener implements View.OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
}
else
{
return false;
}
}
}
和
class MyDragListener implements View.OnDragListener {
View draggedView;
EditText dropped;
private android.widget.LinearLayout.LayoutParams layoutParams;
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
layoutParams = (LinearLayout.LayoutParams) v.getLayoutParams();
// Do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
int x_cord = (int) event.getX();
int y_cord = (int) event.getY();
break;
case DragEvent.ACTION_DRAG_EXITED:
x_cord = (int) event.getX();
y_cord = (int) event.getY();
layoutParams.leftMargin = x_cord;
layoutParams.topMargin = y_cord;
v.setLayoutParams(layoutParams);
break;
case DragEvent.ACTION_DRAG_LOCATION:
x_cord = (int) event.getX();
y_cord = (int) event.getY();
break;
case DragEvent.ACTION_DRAG_ENDED:
// Do nothing
break;
case DragEvent.ACTION_DROP:
// Do nothing
break;
default:
break;
}
return true;
}
}
灿”在网上找到一个可行的解决方案,并尝试了几个教程,并得出了相同的结果。任何人都可以看到错误在哪里?
非常感谢任何帮助,谢谢。
谢谢你,我做了改变DragEvent.ACTION_DRAG_ENDED - 似乎没有解决这个问题。您是否建议我在主机活动中编写监听器类?现在,这是在一个片段中完成的,该片段仅覆盖活动的下半部分,但我希望能够将EditText从片段拖到活动本身上(上半部分)。 –
首先尝试通过删除侦听器中除DragEvent.ACTION_DRAG_ENDED之外的所有代码来隔离问题。对于任何其他情况返回true。以这种方式拖动结束时,您应该再次看到您的隐形EditText – yshahak
我刚刚尝试过这一点,但出于某种原因我得到了相同的结果。 EditText只是消失了第二次释放我的水龙头 - 我可以尝试的其他任何东西? –