Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在我自己的应用程序中获得拖放到垃圾箱的主屏幕行为?_Java_Android_Drag And Drop - Fatal编程技术网

Java 如何在我自己的应用程序中获得拖放到垃圾箱的主屏幕行为?

Java 如何在我自己的应用程序中获得拖放到垃圾箱的主屏幕行为?,java,android,drag-and-drop,Java,Android,Drag And Drop,在Android主屏幕上,可以通过将项目拖到垃圾箱来删除项目 我希望在我自己的应用程序中有类似的功能,其中我有一个带有自定义视图项的视图,我希望用户可以拖放 是否有一种简单的方法来实现此功能?或者有人能给我一些指点,指导我实现这一目标的可能的困难方法吗?我假设您有一个类似于主屏幕的应用程序,至少有一个视图,其中包含要拖放的项目 正如奥斯汀·马奥尼在评论中所说,你可以参考安卓开源主屏幕代码。但由于拖放是一个易于实现的功能,您也可以自己处理它 您需要将项目存储在一个数组中。然后检查事件类型 在每一次

在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应用程序是开源的。我认为您可以通过查看源代码从它们的实现中学习。