Любой способ имитировать MotionEvent.transform (Matrix) в Android API уровня 8 или 9? - PullRequest
3 голосов
/ 03 ноября 2011

Я заметил, что в Android API Level 11 (ICS) MotionEvent имеет метод transform, который принимает Matrix.Это на самом деле сделало бы кое-что, что я делаю несколько чище, но я кодирую для уровня 8.

Есть ли удобная альтернатива MotionEvent.transform(), которая работает на более ранних версиях Android?Мне бы хотелось, чтобы все исторические и мультисенсорные координаты были преобразованы, и мне бы хотелось, чтобы он правильно обрабатывал различие между относительными и абсолютными координатами, где все становится немного сложнее.

Что я на самом делеЯ хочу знать, могу ли я создать MotionEvent, который является преобразованной копией другого MotionEvent.На самом деле мне не нужны произвольные преобразования, но я должен уметь переводить и масштабировать.Я считаю, что могу перевести с offsetLocation, но я не вижу способа масштабировать MotionEvent (до уровня 11).В частности, как я могу преобразовать координаты события мультитач?Методы obtain просто принимают одну (x, y) пару, а не массив.

Причина, по которой я хочу это сделать, заключается в том, что у меня есть один объект, который отправляет события в набор "дочерних" объектов,Прямо сейчас каждый из этих детей преобразует координаты в особом порядке.Однако родитель (диспетчер) знает, какое преобразование необходимо выполнить, поэтому было бы намного понятнее просто преобразовать MotionEvent (или копию) перед отправкой его дочерним элементам.В качестве альтернативы я мог бы создать свой собственный класс, который либо обернет MotionEvent, либо скопирует и преобразует данные из MotionEvent, но было бы намного проще, если бы я мог использовать MotionEvent.

1 Ответ

3 голосов
/ 10 ноября 2011

Насколько я могу судить, ответ «нет». Похоже, что нет никакого способа манипулировать координатами любого указателя, кроме первого в MotionEvent в версиях Android до соты.

Обходной путь, который я нашел, состоял в том, чтобы создать свой собственный класс-обертку (который я случайно назвал TouchEvent) и использовать его вместо MotionEvent при делегировании onTouch. Это не сработало бы, если бы я реализовывал какой-то стандартный интерфейс, но в моем случае я контролировал интерфейс моих делегатов, поэтому это решение работает достаточно хорошо.

...