在Android主屏幕上,可以通过将项目拖到垃圾箱来删除这些项目。
我想在我自己的应用程序中有类似的功能,我有一个自定义视图项的视图,我希望用户可以拖放。
有没有简单的方法来实现此功能?或者有人可以给我指点,可以指导我实现这个可能很难的方法吗?
答案 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.