Java 开始拖动时显示拖放目标
我试图在用户开始拖动时,使拖放目标可见(或添加它们) 文档说明,当收到Java 开始拖动时显示拖放目标,java,android,drag-and-drop,Java,Android,Drag And Drop,我试图在用户开始拖动时,使拖放目标可见(或添加它们) 文档说明,当收到操作拖动开始时,应在onDrag中处理此问题,然后可以使用此操作来表示突出显示视图,使其能够接受拖动 但是,我的视图(实际上是一个线性布局)在没有进行拖动时看起来应该不同,并且在开始拖动时显示放置目标 正常外观: [Item A][Item B] 当拖动开始时,它应该如下所示: [ ][Item A][ ][Item B][ ] 其中,空括号表示可以拖放的位置 为了实现这一目标,我尝试了以下方法: 1)动态添加视图 当顶级
操作拖动开始时,应在onDrag
中处理此问题,然后可以使用此操作来表示突出显示视图,使其能够接受拖动
但是,我的视图(实际上是一个线性布局
)在没有进行拖动时看起来应该不同,并且在开始拖动时显示放置目标
正常外观:
[Item A][Item B]
当拖动开始时,它应该如下所示:
[ ][Item A][ ][Item B][ ]
其中,空括号表示可以拖放的位置
为了实现这一目标,我尝试了以下方法:
1)动态添加视图
当顶级容器接收到操作\u拖动\u启动时
,动态添加拖放目标视图。问题:新添加的视图本身(或任何其他事件)从未接收到操作\u拖放\u启动,因此它们无法接受拖放
2)具有隐藏的投放目标
始终具有View.GONE
将目标始终放置在可用的实际项目之间,并在拖动开始时使其View.VISIBLE
:
if(event.getAction() == DragEvent.ACTION_DRAG_STARTED) {
// Make all containers visible:
for(int i = 0; i < cc.getChildCount(); i++) {
cc.getChildAt(i).setVisibility(View.VISIBLE);
}
}
if(event.getAction()==DragEvent.ACTION\u DRAG\u启动){
//使所有容器可见:
对于(int i=0;i
问题:显然View。GONE
也意味着视图不接收事件。与视图相同。不可见
那么,我的选择是什么?当拖动开始/结束时,使用“查看可见”和“动态调整大小”?看起来真的很傻
有更好的建议吗?您需要在调用startDrag()
或startdragandrop()
之前更改可见性。我在(从of,FWIW)中证明了这一点
在该示例中,如果您在平板电脑上运行它,我将在RecyclerView
中长时间单击某个项目时启动拖放操作:
@Override
public boolean onLongClick(View v) {
if (listener!=null) {
listener.onStartDrag();
}
ClipData clip=ClipData.newRawUri(title.getText(), videoUri);
View.DragShadowBuilder shadow=new View.DragShadowBuilder(thumbnail);
itemView.startDrag(clip, shadow, Boolean.TRUE, 0);
return(true);
}
但在调用startDrag()
之前,我会让注册的侦听器知道我即将开始拖动。该侦听器是宿主活动,它使我的“热点”放置目标可见:
@Override
public void onStartDrag() {
info.setVisibility(View.VISIBLE);
}
净效果类似于主屏幕,当您开始拖动时,会在主屏幕上显示特定的“操作”(例如卸载)
最初我尝试了你的第二种方法,但没有成功。我的假设是,调用startDrag()
或startdragandrop()
基本上可以捕获可见放置目标的列表,因此对该列表的更改(新小部件,新可见小部件)在这一点之后没有效果。您可以在拖动侦听器的同时动态添加视图这里是一个示例,但使用onClick Listener尝试将其更改为onDrag Lister