2011-11-03 45 views
3

我注意到,在Android API级别11(ICS)MotionEvent有一个transform方法需要Matrix。这实际上会让我做的更清洁一点,但我编码的级别为8级。任何方式来模拟Android API级别8或9中的MotionEvent.transform(矩阵)?

有没有方便的替代方案MotionEvent.transform()适用于早期版本的Android?我希望历史和多点触摸坐标全部转换,我希望它能够正确处理相对与绝对坐标之间的区别,这是事情变得棘手的地方。

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

我想这样做的原因是我有一个对象将事件分派给一组“子”对象。现在,这些孩子中的每一个都会以某种临时的方式转换坐标。但是,父母(调度员)知道需要执行哪种转换,因此在将其分发给儿童之前,将其转换为MotionEvent(或副本)会更清晰。或者,我可以创建自己的类,它可以包装MotionEvent或将数据从MotionEvent中复制并转换出来,但如果我可以使用MotionEvent会更简单。

+0

你唯一能做的就是自己计算转换。使用Matrix类应该是微不足道的。 –

+0

@aleph_null是的,但我真的可以用变换后的坐标填充一个'MotionEvent'吗?我没有看到任何方式设置更多的一对(x,y)坐标。我如何转换多点触控事件? –

+0

即时通讯不知道它是否会工作,但也许你可以使用MotionEvent.obtain和几个addBatch调用创建一个MotionEvent。独立转换每组x,y坐标。 –

回答

3

尽我所知,答案是“不”。似乎没有任何方式可以操纵Honeycomb版本的Android中MotionEvent中的第一个pointerId以外的任何pointerId的坐标。

我想出了一个解决方法是创建自己的包装类(我又恰巧打电话TouchEvent)和委托onTouch时使用此而不是MotionEvent。如果我正在实现一些标准接口,这是行不通的,但在我的情况下,我控制了我的代理的接口,所以这个解决方案工作得很好。

相关问题