2013-07-28 3 views
3

Когда дочернее представление повернуто, как обрабатывает привязку Android привязки точек касания от родительского представления к дочернему виду?Как Android обрабатывает преобразование точек касания в дочерних представлениях?

Являются ли сенсорные точки через трансформацию в какой-то момент? Если да, то где?

Я знаю, что ViewGroups есть такие методы, как: dispatchTouchEvent() onInterceptTouchEvent() onTouchEvent() т.д.

Является ли один из тех, кто отвечает за принятие точки касания в пределах родительского вида и преобразования его в локальной системе координат пространства подвид ?

Я попытался просмотреть исходный код, но не мог понять все взаимодействия.

ответ

6

Весь этот материал выполняется в методе dispatchTouchEvent.

  1. ViewGroup перебирает него дети
  2. Создание новой копии передаются dispatchTouchEventMotionEvent для каждого ребенка (получение из бассейна быть более точным). См. MotionEvent.obtain(MotionEvent)
  3. Смещает положение вновь созданного MotionEvent с использованием верхнего и левого положения ребенка (см. Методы getTop и getLeft).
  4. Применяется преобразование с использованием методы MotionEvent#transform (взяв обратную матрицу преобразования из ребенка)
  5. Наконец, он отправляет MotionEvent к ребенку (а в случае, когда этот ребенок также ViewGroup см pt.1)
  6. Он перерабатывает полученный ранее MotionEvent (см MotionEvent#recycle)

и да, то как Делян упоминалось - преобразование применяется только для Honeycomb и более новых версий Android. В старых версиях выполняется только смещение.

+1

Следует отметить, что это происходит только на сотах и ​​выше, поскольку для этого необходимы преобразования для каждого представления. – Delyan

+0

@ Далянь, это так. Отредактировал мой ответ. –

+0

Похоже, что NineOldAndroids добавляет поддержку вращения - любая идея как? Кажется, класс ViewGroup действительно должен быть заменен для этого. – Studio4Development

 Смежные вопросы

  • Нет связанных вопросов^_^