0

我正在写普通的拼图游戏。为方便起见,我创建了一个自定义视图:PuzzleView extends ImageView. 它覆盖了onTouchEvent(),所以我可以View用手指移动我的。好的。

但是,我无法将这些视图彼此靠近,因此它们适合自己。拼图不是正方形,它们的形状如下所示:

在此处输入图像描述

问题是这些视图必须重叠一点才能看起来不错。但是当正方形重叠时,触摸事件在相交区域中效果不佳。如果我天真地把这个谜题作为背景PuzzleView,其中 4 个会是这样的:

在此处输入图像描述

它们具有透明度,因此我可以挤压它们以使其看起来不错。但这不是一个好主意,因为触摸事件。如果我们触摸边界,“更高”的拼图(在 z-index 中)将被触摸。也许用户想拿起另一个,但他不能。

我已经阅读了一些有关 AndroidShape课程的信息。如果我有Shape一个拼图,那就太好了 - 然后我可以将它用作我的背景,PuzzleView我希望MotionEvent只有当我触摸形状时才会出现,而不是它周围的一些矩形区域。

问题是:如何获得Shape一个谜题?理想情况下,我将指向我的图像,它会给我一个Shape从该图像中获取的图像。如果不可能(或非常困难),也许我们可以用 来解决这个难题ShapePath但是怎么做呢?也许它的形状太复杂而无法使用Path?也许有更简单的方法?

4

2 回答 2

1

很难回答你所有的问题(它们不是很具体),所以我只是给你我的观点:

我会说android内置视图不是这种应用程序的最佳选择。直接在 a View(或 a SurfaceView)上绘图可能是更好的选择,它可以很容易地在另一个之上绘制图像。例如,假设您的形状的宽度为 100,您可以在 x=0 处绘制第一个,在 x=90 处绘制第二个,它们将重叠。

你可能认为它需要更多的工作,但如果你坚持使用 ImageViews,你很可能会遇到其他问题和性能问题(如果你有很大的难题)。

于 2013-06-19T22:23:15.773 回答
0

你不能只让图像的白色部分透明吗?如果您想匹配它们,我会很想将形状的表示存储为逻辑对象,而不是尝试逐像素匹配。如果您想逐像素匹配,请参阅Pixel-Perfect Collision Detection Android(您需要合并位图坐标和视图在屏幕上的相对位置)。

于 2013-06-19T21:49:00.947 回答