gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:53 25 4
gpt4 key购买 nike

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

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

有没有简单的方法来实现这个功能?或者有人可以给我一些指导,指导我以可能很困难的方式实现这一目标吗?

最佳答案

我假设您有一个类似于应用程序的主屏幕,至少有一个包含您要拖放的项目的 View 。

正如 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.

关于java - 如何在我自己的应用程序中获得拖动到 bin 的主屏幕行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com