如何在我自己的应用程序中获取拖动到bin的主屏幕行为?

时间:2010-12-14 16:27:07

标签: java android drag-and-drop

在Android主屏幕上,可以通过将项目拖到垃圾箱来删除这些项目。

我想在我自己的应用程序中有类似的功能,我有一个自定义视图项的视图,我希望用户可以拖放。

有没有简单的方法来实现此功能?或者有人可以给我指点,可以指导我实现这个可能很难的方法吗?

1 个答案:

答案 0 :(得分: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.