3

我注意到在 Android API Level 11 (ICS)MotionEvent中有一个transform方法需要一个Matrix. 这实际上会使我正在做的事情变得更干净,但我正在为 Level 8 编写代码。

MotionEvent.transform()在早期版本的 Android 上是否有一个方便的替代方案?我希望历史坐标和多点触控坐标都被转换,并且我希望它能够正确处理相对坐标与绝对坐标之间的区别,这是事情变得有点棘手的地方。

我真正想知道的是我是否可以创建MotionEvent一个转换后的另一个副本MotionEvent。我实际上不需要任意转换,但我需要能够翻译和缩放。我相信我可以用 翻译offsetLocation,但我看不到任何缩放 a 的方法MotionEvent(在 11 级之前)。特别是,如何转换多点触控事件的坐标?这些obtain方法只需要一个 (x,y) 对,而不是一个数组。

我想这样做的原因是我有一个将事件分派给一组“子”对象的对象。现在,这些孩子中的每一个都以一种特别的方式转换坐标。然而,父母(调度员)知道需要执行什么转换,因此在将其MotionEvent分派给孩子之前只转换(或副本)会更干净。或者,我可以创建自己的类来包装MotionEvent或复制和转换数据出 a MotionEvent,但如果我可以使用 a 会简单得多MotionEvent

4

1 回答 1

3

据我所知,答案是“不”。似乎没有任何方法可以操作任何pointerId 的坐标,而不是在MotionEventAndroid 的Honeycomb 版本中的第一个之外。

我想出的解决方法是创建我自己的包装类(我碰巧调用它TouchEvent)并使用它而不是MotionEvent委托时使用它onTouch。如果我正在实现一些标准接口,这将不起作用,但在我的情况下,我控制了我的代表的接口,所以这个解决方案运行得很好。

于 2011-11-10T06:55:09.473 回答