Java 如何在我自己的应用程序中获得拖放到垃圾箱的主屏幕行为?
在Android主屏幕上,可以通过将项目拖到垃圾箱来删除项目 我希望在我自己的应用程序中有类似的功能,其中我有一个带有自定义视图项的视图,我希望用户可以拖放Java 如何在我自己的应用程序中获得拖放到垃圾箱的主屏幕行为?,java,android,drag-and-drop,Java,Android,Drag And Drop,在Android主屏幕上,可以通过将项目拖到垃圾箱来删除项目 我希望在我自己的应用程序中有类似的功能,其中我有一个带有自定义视图项的视图,我希望用户可以拖放 是否有一种简单的方法来实现此功能?或者有人能给我一些指点,指导我实现这一目标的可能的困难方法吗?我假设您有一个类似于主屏幕的应用程序,至少有一个视图,其中包含要拖放的项目 正如奥斯汀·马奥尼在评论中所说,你可以参考安卓开源主屏幕代码。但由于拖放是一个易于实现的功能,您也可以自己处理它 您需要将项目存储在一个数组中。然后检查事件类型 在每一次
是否有一种简单的方法来实现此功能?或者有人能给我一些指点,指导我实现这一目标的可能的困难方法吗?我假设您有一个类似于主屏幕的应用程序,至少有一个视图,其中包含要拖放的项目 正如奥斯汀·马奥尼在评论中所说,你可以参考安卓开源主屏幕代码。但由于拖放是一个易于实现的功能,您也可以自己处理它 您需要将项目存储在一个数组中。然后检查事件类型 在每一次操作中_DOWN您都需要检查是否有项目被用户击中。例如,如果我们将圆作为项目,我们需要捕获当前的动作向下坐标,以便我们可以检查它们是否在项目内,并根据动作向下坐标获取用户将要拖动的项目的ID 在操作\u移动中,您只需将当前的x和y坐标传递给项目,即可在新位置重新绘制它 这只是拖放功能。现在,您需要测试项目是否位于您称为bin的特定扇区中。因此,您可以在屏幕上定义一个矩形。在行动中,将测试项目移动到该区域内,仅此而已 只是一些拖放示例代码:
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;
}
public boolean onTouchEvent(运动事件){
int itemID=0;
int X=(int)event.getX();
int Y=(int)event.getY();
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
用于(项目:可拖动的_项目){
//项目的中心坐标
int centerX=item.getX()+25;
int centerY=item.getY()+25;
//计算触摸到物品的距离(半径)
//获取要拖动的项目
如果(距离<20){
itemId=item.getID();break;
}
}
打破
case MotionEvent.ACTION\u移动:
如果(itemID>0){
Items[itemID-1].setX(X-25);
项目[itemID-1].setY(X-25);
}
打破
}
}
使无效();返回true;
}
如果您想深入了解代码,请看一下Sweet。。我也想知道怎么做。。让我做些调查,如果我发现了什么,我会给你打电话的。很好!我现在有了一个有效的概念证明。我对你的实现感兴趣。你提到的Android中的launcher应用程序是开源的。我认为您可以通过查看源代码从它们的实现中学习。