我正在创建一个Android棋盘游戏,其中有几个不同形状的棋盘空间(如风险)。
我想确保我的电路板看起来是正确的,并且无论屏幕大小/分辨率如何,OnTouchListeners都会保留在GUI上。
我想到的可能解决方案及其问题:
为电路板创建单个图像,并根据像素几何图形指定OnTouchListeners。问题:如果用户的显示器分辨率不同,我的监听器可能与我的图像不在同一像素下(对吗?)
创建多个ImageButtons并将它们排列在一起。问题:ImageButtons可能会根据显示重新排列,最终会出现重叠的空格或间隙。
基本问题: 如何确保侦听器与使用不规则几何体的GUI中的图形同步?
答案 0 :(得分:0)
我在一个有不规则触摸区域的应用程序上工作,所以我可以通过一种方式为您提供指导。
从整个电路板的单个图像开始。无论任何设备分辨率如何,此图像都将具有一定的(“固有”)宽度和高度。
现在这里是繁琐的部分。您(或者您的平面设计师)需要为每个触摸区域绘制出不规则多边形的坐标。这些将是您的应用程序的常量。
当您显示电路板时,如果要在图像上进行缩放和平移,则需要跟踪显示的变换矩阵。当用户触摸屏幕时,您将获得OnTouchListener
的x,y坐标,并且对于那些有用的坐标,您将必须“解变”x,y以将其与电路板的固有尺寸标准化和你的多边形。
我们使用http://alienryderflex.com/polygon/中的算法推出了自己的命中测试逻辑,但您也可以尝试这样做:从多边形坐标中创建Path
(使用moveTo()
,{{ 1}}和lineTo()
),然后使用close()
将Path
分配给Region
。一旦你拥有了它,据说你应该能够使用Region.setPath()
进行测试,但我从未尝试过,所以我不能保证它会起作用。