2011-09-29 103 views
0

我需要一些有价值的建议,你们... 我有一个用户界面,我必须从一个视图拖动对象到另一个。 我有这个UI的粗略草图 enter image description here在android中的自定义视图

我想我必须为此创建一个自定义视图。我必须从袋子1和袋子2中拖出一个正方形和一个球[两个袋子都是可以滚动的,每个袋子可以包含10到60个物品],然后逐个放入壁橱。后来我必须找到衣柜里的物品数量。衣柜中的物品必须以保持良好的方式排列[可以是......像连续6个]。

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

快乐编码..!

+0

嘿拉胡尔,你实现这个这样的情况?其实我也想实现。我搜查了很多,但我仍然没有发现任何东西。如果你实现的话请给我一个例子,以便我可以参考。提前致谢。 – anddev

+0

基本上我做的是,找到'closet'视图的开始和结束,并执行任何操作是必需的,对不起,我没有发布我的代码。让我检查他们是否和我在一起。 – rahul

+0

嘿拉胡尔,感谢您的回复。如果您发现与此相关的代码,那么请在邮件给我[email protected]。我在等你的回复。谢谢。 – anddev

回答

2

我会建议在ViewGroup内部布置三个不同GridView对象的设计,该ViewGroup支持将对象从一个GridView拖动到另一个GridView。这些对象将是自定义ImageView子类,因此您可以在代码中拥有某种位置来支持某种类型的拖放协议,因为您可能希望将特定于应用程序的某些数据与正在拖动的对象相关联。至于拖放协议,您可以考虑改编Android Launcher拖放框架或Android开发人员网站上描述的current drag-drop classes。对于当前的拖放式课程,我没有太多要说的。我还没有尝试过,但了解它们在我的待办事项清单上。但是,我已经完成了Launcher代码的改编,并且已经将它写在我的博客上,并在那里发布了演示应用程序和源代码。见Drag-Drop for an Android GridView

与发起在Android启动的框架,你有一个很好的集合类和接口的工作。一些对象包括:DragLayer,DragSource,DropTarget,DragController,DragView。 DragLayer是一个自定义ViewGroup,在其中可以进行所有拖放操作。它将所有触摸事件的处理委托给一个DragController,它是在屏幕上实际移动对象的对象。正如它这样做的,它与DropTarget对象进行交互,为用户提供视觉反馈,指出正在拖动的东西以及放置某物的地方可用。 DropTarget是一个可以放下东西的对象。 DragSource是可以在DragLayer中拖动的对象的接口。 Launcher框架是一个很好的框架,因为它提供了一种思考拖放的方法,以及如何划分框架定义的职责。

我之所以建议GridView的为您的问题是,它听起来就像你已经有这样的想法。壁橱有“可能连续6个”,这可能是一个或多个行的GridView取决于你有多大的屏幕空间。一个GridView也适用于容纳正方形和圆形的容器。如果这是一个很好的选择,你可以在我的拖放教程中学习代码,看看是否可以很容易地将对象从一个GridView移动到另一个GridView。

在我的演示程序中,我结束了一个ImageView的自定义子类,我称其为ImageCell。这些是网格上的视图。 ImageCell允许将对象从它们拖到它们上面。有一段时间,当我在教程中工作时,我也有一个自定义的GridView类,但最终以标准的GridView结束。这听起来像你想要一个自定义的GridView,因为它听起来像是在壁橱里不同于在其他部分。它给你一个方便的地方,你还没有想到的方法。

我希望一些建议证明是有用的。

+0

嘿比尔,你能分享与此相关的任何例子吗? – anddev

0

取决于您定位的Android版本。对于11岁及以上,你可以使用the built in drag and drop functionality,否则你几乎是你自己的。我通常会建议你实施某种长按操作,甚至可以让你选择多个项目并批量移动它们,这将是一件非常简单的事情。

如果你真的需要DnD,你应该查看this的例子,它应该给你一些关于如何自己实现的想法。

+0

感谢您的回应..我目前正在使用API​​级别8,谢谢你的例子。 – rahul

0

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

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

我认为,那些不需要&下降直接处理的阻力,但他们应该支持

  • 删除和添加元素
  • 提供setOnItemTouched(Interface_class)回调制定者。

然后你需要编写一个集装箱的自定义视图(让我们将其命名为BagContainerView)将包含三包和处理拖动&从袋中下降。

您将使用CustomBagView.setOnItemTouched为每个行李提供一个handleDrag回拨,然后跟踪其中的手指动作。

拖动完成后,您必须找到它结束的位置,找到正确的'customBagView'并要求它将项目添加到其列表中。

+0

hmm..thanks为响应 – rahul