Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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
android中的自定义视图_Android_Drag And Drop - Fatal编程技术网

android中的自定义视图

android中的自定义视图,android,drag-and-drop,Android,Drag And Drop,我需要你们给我一些宝贵的建议。。。 我有一个UI,我必须将对象从一个视图拖到另一个视图。 下面是这个用户界面的草图 我想我必须为此创建一个自定义视图。我必须从包1和包2中拖出一个正方形和一个球[两个包都可以滚动,每个包可以包含10到60个项目],然后一个接一个地放到壁橱里。然后我要找出壁橱里的物品数量。衣柜中的物品必须以维护良好的方式排列[可能是……像一排6件] 我应该从哪里开始 我应该使用多少自定义视图 有没有简单有效的UI解决方案 快乐的编码 取决于您的目标Android版本。对于11

我需要你们给我一些宝贵的建议。。。 我有一个UI,我必须将对象从一个视图拖到另一个视图。 下面是这个用户界面的草图

我想我必须为此创建一个自定义视图。我必须从包1和包2中拖出一个正方形和一个球[两个包都可以滚动,每个包可以包含10到60个项目],然后一个接一个地放到壁橱里。然后我要找出壁橱里的物品数量。衣柜中的物品必须以维护良好的方式排列[可能是……像一排6件]

  • 我应该从哪里开始
  • 我应该使用多少自定义视图
  • 有没有简单有效的UI解决方案

快乐的编码

取决于您的目标Android版本。对于11岁及以上的人,你可以使用,否则你就只能靠自己了。我通常会建议您实现某种长按操作,甚至允许您选择多个项目并成批移动它们,这将是一个非常简单的实现


若你们真的需要DnD,你们应该看看这个例子,它应该给你们一些关于如何实现你们自己的想法

我认为bag1、bag2和壁橱可以是同一个可配置自定义视图的三个实例(我们将其命名为
CustomBagView

CustomBagView
s应负责显示项目(例如使用imageview的gridview)

我认为它们不需要直接处理拖放操作,但它们应该支持

  • 删除和添加元素
  • 提供一个
    setOnItemTouched(接口类)
    回调设置器
然后,您需要编写一个容器自定义视图(我们将其命名为
BagContainerView
),该视图将包含三个袋子,并处理从袋子中拖放的操作

您将使用
CustomBagView.SetonitTouched
向每个行李提供
handleDrag
回调,然后在其中跟踪手指的运动


拖动完成后,您必须找到它的结束位置,找到右侧的“customBagView”,并要求它将该项添加到其列表中。

我建议在视图组中放置三个不同的GridView对象,以支持将对象从一个GridView拖动到另一个GridView。这些对象将是自定义的ImageView子类,因此您可以在代码中占有一席之地,以支持某种拖放协议,因为您可能希望将特定于应用程序的某些数据与正在拖动的对象相关联

至于拖放协议,你可以考虑Android启动和拖动框架的适应性,或者Android开发者网站上描述的。关于当前的拖放类,我没有太多要说的。我还没有试过,但理解它们在我的任务清单上。不过,我已经对启动程序代码进行了修改,并将其写在我的博客上,并在那里发布了演示应用程序和源代码。看

有了源自Android Launcher的框架,您可以使用一组很好的类和接口。一些对象包括:DragLayer、DragSource、DropTarget、DragController、DragView。DragLayer是一个自定义视图组,所有拖放操作都在该视图组中进行。它将所有触摸事件的处理委托给DragController,DragController是在屏幕上实际移动对象的对象。当它这样做时,它与DropTarget对象交互,向用户提供视觉反馈,即正在拖动某个对象,并且可以放置某个对象。DropTarget是一个可以放置某些内容的对象。DragSource是可在DragLayer中拖动的对象的接口。Launcher框架是一个很好的框架,因为它为您提供了一种考虑拖放以及如何划分框架定义的职责的方法

我建议使用GridView解决您的问题的原因是,听起来您已经这样想了。壁橱里有“可能是6排”,因此可以是一个网格视图,根据屏幕空间的大小有一行或多行。GridView也适用于容纳正方形和圆形的容器。如果这很合适,您可以学习我的拖放教程中的代码,看看这是否可以让您轻松地将对象从一个GridView移动到另一个GridView

在我的演示程序中,我得到了一个名为ImageCell的ImageView自定义子类。这些是网格上的视图。ImageCell允许将对象从中拖出并拖到其中。在编写教程的一段时间里,我也有一个自定义的GridView类,但最终使用了标准的GridView。这听起来像是你想要一个自定义的GridView,因为它听起来像是在壁橱里不同于在其他部分。有了它,你就有了一个方便的地方,可以使用你还没有想到的方法


我希望这些建议中的一些能被证明是有用的。

谢谢您的回复。。我目前正在使用API级别8,也感谢您提供的示例。嘿,Rahul,您实现过这样的场景吗?实际上,我想实现同样的功能。我找了很多,但还是什么也没找到。如果你实施,请给我一个例子,以便我可以参考。提前感谢。基本上我做的是,找到“壁橱”视图的开始和结束,并执行所需的任何操作,很抱歉,我没有发布我的代码。让我看看他们是否和我在一起。嘿,拉胡尔,谢谢你的回复。。如果你找到了与此相关的代码,请发邮件给我mansivora01@gmail.com. 我在等你的答复。谢谢。嘿,比尔,你能和我分享一些与此相关的例子吗?