如何在我自己的应用程序中获取拖动到 bin 的主屏幕行为?
Posted
技术标签:
【中文标题】如何在我自己的应用程序中获取拖动到 bin 的主屏幕行为?【英文标题】:How to get the homescreen behaviour of drag to bin, in my own application? 【发布时间】:2011-05-25 09:31:14 【问题描述】:在 android 主屏幕上,可以通过将项目拖到垃圾箱来删除它们。
我想在我自己的应用程序中拥有类似的功能,在该应用程序中,我有一个包含自定义视图项的视图,我希望用户可以拖放这些视图项。
有没有简单的方法来实现这个功能?或者有人可以给我指点,指导我实现这一目标的可能困难方法吗?
【问题讨论】:
Sweet.. 我也想知道该怎么做.. 让我做一些研究,如果我发现了什么,我会回复你。 不错!我现在有一个工作的概念证明。对您的实施感兴趣。 您所指的Android启动器应用是开源的。我认为您可以通过查看源代码从他们的实现中学习。 android.git.kernel.org/?p=platform/packages/apps/… 【参考方案1】:我假设您有一个类似主屏幕的应用程序,至少有一个包含您要拖放的项目的视图。
就像 Austyn Mahoney 在他的评论中所说,您可以参考 android 开源 主屏幕代码。但由于拖放是一个易于实现的功能,您也可以自行处理。
您需要将您的物品存放在例如数组。然后浏览事件类型。
在每个 ACTION_DOWN 上,您都需要检查一个项目是否被用户击中。例如。如果我们有圆作为项目,我们需要捕获当前的 ACTION_DOWN 坐标,以便我们可以检查它们是否在项目内,并根据 ACTION_DOWN 坐标获取用户将要拖动的项目的 ID。
在 ACTION_MOVE 上,您只需将当前的 x 和 y 坐标传递给项目即可在新位置重绘它。
这只是拖放功能。现在您需要测试该项目是否位于您称为 bin 的特定扇区中。因此,您在屏幕上定义了一个矩形。在 ACTION_MOVE 中,您的测试项目在该区域内,仅此而已。
只是一些拖放示例代码:
public boolean onTouchEvent(MotionEvent event)
int itemID = 0;
int X = (int)event.getX();
int Y = (int)event.getY();
switch(event.getAction())
case MotionEvent.ACTION_DOWN:
for(Items item : dragable_item)
//center coords of the item
int centerX = item.getX() + 25;
int centerY = item.getY() + 25;
//calculate the distance (radius) from touch to item
//get item to drag
if(distance < 20)
itemId = item.getID(); break;
break;
case MotionEvent.ACTION_MOVE:
if(itemID > 0)
Items[itemID-1].setX(X-25);
Items[itemID-1].setY(X-25);
break;
invalidate(); return true;
如果您想深入了解代码,请查看anddev.org - drag and drop.
【讨论】:
以上是关于如何在我自己的应用程序中获取拖动到 bin 的主屏幕行为?的主要内容,如果未能解决你的问题,请参考以下文章