【发布时间】:2017-04-26 11:36:49
【问题描述】:
我正在尝试在用户开始拖动时立即使放置目标可见(或添加它们)。
文档解释说,当收到ACTION_DRAG_STARTED 时,这应该在onDrag 中处理,然后可以用来表示将View 突出显示为能够接受拖动。
但是,我的视图(实际上是 LinearLayout)在不进行拖动时应该看起来不同,并在启动拖动时显示放置目标。
正常外观:
[Item A][Item B]
当拖动开始时,它应该是这样的:
[ ][Item A][ ][Item B][ ]
空括号表示可以拖放的位置。
我尝试了以下方法来实现这一点:
1) 动态添加视图
当顶级容器收到ACTION_DRAG_STARTED时,动态添加放置目标视图。问题:新添加的视图本身(或任何其他事件)从未收到ACTION_DRAG_STARTED,因此它们无法接受丢弃。
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);
}
}
问题:显然View.GONE 也意味着视图不接收事件。与View.INVISIBLE 相同。
那么,我有哪些选择?使用说View.VISIBLE 并在拖动开始/结束时进行一些动态调整?看起来真的很傻……
有更好的建议吗?
【问题讨论】:
-
您可以在拖动监听器的同时动态添加视图,这里是一个示例,但使用 onClick 监听器尝试将其更改为 onDrag Lister stackoverflow.com/questions/8722595/…
标签: java android drag-and-drop