我想将复杂的形状构建为两个圆和一个矩形的交集。经过一番研究,java.awt.geom.Area课程似乎非常适合这项任务。
然而,当我发现awt
软件包没有安装android SDK时,我感到很沮丧。有没有人知道android的任何替代品,允许我通过定义简单形状的并集和交集来创建复杂的形状?
注意:使用图形剪裁绘制形状不起作用,因为我不只是想绘制形状,我还想将形状存储在内存中以进行碰撞检测和其他交互。
答案 0 :(得分:5)
Android替代java.awt.geom.Area
编辑:@numan使用Android SDK中的一些类指出了一个优秀的选项,我在原始答案时没有意识到这一点:
https://developer.android.com/reference/android/graphics/Region.html https://developer.android.com/reference/android/graphics/Region.Op.html
Region
允许您定义几何区域,然后您可以使用Region
op()
方法和Region.Op
enum
来计算交叉点和更复杂的形状。
您可以使用Canvas
绘制自定义形状,尤其是使用剪辑*方法:
http://developer.android.com/reference/android/graphics/Canvas.html
以下是Android中有关2D图形的一些页面:
http://developer.android.com/guide/topics/graphics/2d-graphics.html http://developer.android.com/guide/topics/graphics/2d-graphics.html#shape-drawable http://developer.android.com/guide/topics/graphics/opengl.html
如果您的图形保持不变(或大致相同),其他一些不错的选择是基于XML的:
http://developer.android.com/guide/topics/graphics/2d-graphics.html#drawables-from-xml
我发现一个非常简洁的解决方案是使用9-patch drawables:
http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
碰撞检测 对于你的目的来说可能有些过分,但是有很多游戏物理库:
http://www.andengine.org http://code.google.com/p/andengineexamples/
http://www.dremsus.com/index.php/2012/01/box2d-game-demo-in-android/
Android, libgdx and box2d basics
或者您可以推出自己的解决方案:
http://cooers.blogspot.com/2012/08/simple-collision-detection-in-2d.html
http://content.gpwiki.org/index.php/Polygon_Collision
http://www.codeproject.com/Questions/244344/Collision-Detection-in-Android
Collision detection for rotated bitmaps on Android
这实际上取决于目的;对于游戏,你可能最好只使用一个库;但如果碰撞检测是您需要的唯一功能,那么您最好自己动手来节省资源。
额外信用:Android库的某些索引
http://www.appbrain.com/stats/libraries/dev
答案 1 :(得分:2)
Android UI takelit使用Skia进行图形渲染,skia使用Region抽象对路径或矩形的形状(例如,cross,union,subtract。请参阅Region.Op类)形状进行集合操作。
Region类也将通过Region.quickContains或Region.quickReject方法进行简单的碰撞检测。