如何最好地实现这个图形设计?(Android)

4
大家好,感谢你们抽出时间阅读。
问题介绍:我正在设计一款 Android 平板应用程序,但我不确定如何最好地实现我所思考的设计方式。我看到了一些关于使用 Android 以外的平台(如 OpenGL 或 HTML)的内容,但我并不知道如何做,是否有必要这样做。
我想做什么:我不知道该如何用语言准确地解释我的想法,所以我决定准备了一个简短的图像,如下所示:
(图片)
因此,我的想法是将按钮拖放到彩色方块中,并检测它们是否发生碰撞,如果发生碰撞,则开始一个事件。然后所有的按钮都会自动重新排序。
问题在于什么?我是 Android 新手,不知道从哪里开始实现这个功能,是该使用 OpenGL 还是直接在 Android 中编程。在这两种情况下,最佳的开始创建方式是什么?
最后:我想澄清一些事情,以防万一:这不是任何人要求我完成的学校作业,我是自己做的。我不是让别人替我完成工作,我只是在寻求你们的意见和帮助,以及如何开始管理这个项目的指导(所以我需要你们的专业意见,而不仅仅是一行代码):D
非常感谢你们所有人的帮助!
Martí.
3个回答

2
这听起来在HTML / JavaScript中使用触摸事件应该很容易实现,可能需要使用支持库进行拖放事件。如果这对你很重要的话,好处是这种解决方案可以很容易地从Android移植到其他移动设备。
像Quintin所说,如果性能是一个大问题,你可以进行优化并使用OpenGL,但你可能可以在不到一天的时间内用HTML制作出一个简单的原型...

那么,如果我想使用OpenGL,我应该从哪里开始呢?你能推荐我一些好的教程来实现它吗?因为我必须承认,我不知道如何在项目中合并Android和OpenGL。除此之外,该应用程序还使用了我已经在Android中实现的声音处理,所以我不知道如果我转向OpenGL会不会有任何问题。如果我尝试使用HTML,情况是否与之前相同?如何将两种语言合并?非常感谢! - TurboTi

1

在这里,Open GL似乎是您最好的选择。我没有太多使用Android OpenGL的经验,但它将是编写应用程序最有效的方式-因为您正在处理碰撞检测和颜色。

Android OpenGL将是最佳选择,因为它将由ADK本地编译,而HTML将在运行时进行解释。

至于使用普通的Android布局,我不建议这样做,因为这不是使用标准组件的“标准”UI。您正在创建一个非常图形化的完全独特的界面,因此我建议坚持这一点。

编辑:您会发现,通过使用标准布局,您所有的用户界面组件都必须进行自定义,并且您将花费大量时间在onDraw()方法中进行碰撞检测。

其中一个问题是您需要检查对象是否与另一个对象发生碰撞,使某些类型的对象彼此感知,并可能存在循环引用的风险。而如果您使用OpenGL,则可以拥有一个“Shape”类型的列表,然后具有一个“checkCollision(Shape draggedObject)”方法,该方法遍历形状列表并使用最简单对象的优化碰撞检测来检查碰撞。

第二个问题是在onDraw()方法中执行碰撞检测会使你的应用程序变得卡顿,并且在进行拖动时对用户来说会感觉粘滞。组件越多,问题越多。

编辑2: 以下是一些Android OpenGL资源: http://developer.android.com/guide/topics/graphics/opengl.html
http://www.learnopengles.com/android-lesson-one-getting-started/
OpenGL 2D示例


和我回答/问@Coderer一样,我该如何将OpenGL(或其他语言)集成到Android项目中?你有什么好的教程吗?谢谢! - TurboTi
我已经添加了一些教程 - 只是要记住使用OpenGL的缺点是现在你必须自己管理大部分事情,比如拖动等。 - Quintin Balsdon
其实我并不担心碰撞检测,因为我只需要用一个正方形来检测是否将圆形放入其中,所以我只需要在放置对象的时候进行检查 :)另一个让我困扰的问题是,所有这些圆形都必须在被拖动时进行动画处理,如果我使用位图动态创建它们(因此它们不在main.xml中),现在我不知道如何对它们进行动画处理,大多数教程都使用视图布局和所有这些东西! - TurboTi
我越听越觉得OpenGL是你的答案。在移动时进行动画处理将在该上下文中更好地完成,而不是其他任何地方。您可以创建一个“AnimationShape”对象,并在对象处于某种状态时定义动画。 - Quintin Balsdon
我也在查找PhoneGap,它似乎非常方便实现,你对此有什么看法?无论如何,我将开始测试OpenGL并查看其工作原理! :) - TurboTi
我对PhoneGap并不是很熟悉 - 但它会为您的项目增加层次,而不是创造简单性。我目前是一名Mono for Android开发人员,这些框架旨在使从一个设备操作系统到另一个设备操作系统的代码库传输变得容易,而不是使UI设计变得容易。您会发现,在这些类型的框架中,有很多样板文件会增加应用程序的大小(以及为框架本身添加一些)。 我并不是说不要使用它,我只是说没有免费的午餐 :) - Quintin Balsdon

1

在我看来,你不需要任何框架。你可以用Android完成所有工作。我也建议你使用Android。虽然我不是一个好的设计师,但我的建议是:

2个Framelayout,一个放在左侧用于颜色工具,另一个放在右侧。 对于颜色工具,每两种颜色可以使用LinearLayout。如果您想要精确的背景设计,可以使用图像软件进行设计,并将其设置为背景。 对于颜色,您可以使用imageButton。

我还建议您阅读有关如何设计应用程序的教程,这里有一个很好的教程:http://mobile.tutsplus.com/tutorials/android/android-layout/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接