自定义视图的拼图形状

时间:2013-06-19 21:47:19

标签: android image

我正在编写正常的拼图益智游戏。为方便起见,我创建了一个自定义视图:PuzzleView extends ImageView。它会覆盖onTouchEvent(),因此我可以用手指移动View。尼斯。

但是,我将这些视图放在一起时遇到问题,所以它们适合自己。拼图不是正方形,它们的形状如下:

enter image description here

问题是这些观点必须重叠一点才能看起来不错。但是当正方形重叠时,触摸事件在交叉区域中工作不好。如果我天真地将这个谜题作为PuzzleView的背景,其中4个将如下所示:

enter image description here

他们有透明度,所以我可以挤他们看起来很好。但由于触摸事件,这不是一个好主意。如果我们触摸边框,将触及“更高”(在z-index中)的拼图。也许用户想拿起另一个而他不能。

我已经阅读了一些有关Android Shape课程的内容。如果我有一个Shape的谜题会很棒 - 然后我可以将它作为PuzzleView的背景使用,我希望MotionEvent只有在触摸形状时才会出现,不是它周围的一些矩形区域。

问题是:如何获得Shape拼图?理想情况下,我会指出我的图像,它将从我的图像中获取Shape。如果不可能(或非常难),也许我们可以用Shape以某种方式制作这个谜题Path,但该如何做呢?也许使用Path形状太复杂了?也许有一种更简单的方法?

2 个答案:

答案 0 :(得分:1)

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

我会说Android内置视图不适合这种应用。直接在View(或SurfaceView)上绘图可能是更好的选择,它可以轻松地将图像绘制在另一个上面。例如,假设您的形状宽度为100,您可以在x = 0处绘制第一个,在x = 90处绘制第二个,它们将重叠。

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

答案 1 :(得分:0)

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