我创建了一个回收站视图,可以在其中拖动项目。以下来自我的适配器:
public void onBindViewHolder(final FootballPitchMainAdapter.ViewHolder holder, int position) {
holder.rvPlayerNameTop.setText("testing");
holder.linearLayoutFull.setOnTouchListener(new 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;
}
}
});
现在这确实可行,我可以拖动linearLayout,其中包含imageView和texview。拖动使我可以将这些物品移出回收站视图。
如果使用运动,则无法将linearlayout框架移出RV。
但是我的问题是,一旦拖动视图,我希望能够将其放置在屏幕上的任何位置。
因此,在创建RV的类中,我设置了以下内容:
pitchRelativeLayout.setOnDragListener(new MyDragListener());
class MyDragListener implements View.OnDragListener{
@Override
public boolean onDrag(View v, DragEvent event) {
switch(event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
//Do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED :
break;
case DragEvent.ACTION_DRAG_LOCATION :
break;
case DragEvent.ACTION_DRAG_ENDED :
// Do nothing
break;
case DragEvent.ACTION_DROP:
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
RelativeLayout container = (RelativeLayout) v;
container.addView(view);
view.setVisibility(View.VISIBLE);
break;
default: break;
}
return true;
}
}
PitchLayout是一个覆盖整个屏幕的相对布局。这个想法只是从RV中拖动一个项目并将其拖放到任何地方。
我试图告诉相对布局以听取拖动项目,然后将其放置在此处。 上面的代码来自我尝试过的在线教程,来自Stackover Flow的答案