Android ListView выбор при повороте в 3d - PullRequest
1 голос
/ 15 февраля 2012

У меня есть требование нарисовать ListView в 3D, повернутом на несколько градусов, повернутых вокруг оси X.Это было достаточно просто, получи мой собственный ListView, затем в методе draw () создай матрицу вращения с android.graphics.Camera и вызови canvas.setMatrix () с полученной матрицей перед вызовом super.draw (canvas).

Однако у меня также есть требование, чтобы выделение по-прежнему работало правильно, даже если список повернут.Звучит просто.Это действительно не такая сложная проблема, но мне еще предстоит найти решение, которое работает.(FWIW, выбор также должен работать с Gingerbread).

Просматривая код AbsListView, кажется, что pointToPosition () вызывается в нескольких местах, чтобы определить, к какому дочернему элементу ударили.Это публичный метод (да!), Поэтому я могу переопределить его и, возможно, заставить его выбрать правильную позицию.Неправильно.Эта функция не вызывается при выборе элемента списка.Должен быть один из других путей ...

Другие пути в onTouchEvent AbsListView используют mMotionPosition, который обнаруживается путем вызова findMotionRow () .... который является закрытым в ListView :(. Невозможно переопределить это безсоздание моего собственного ListView, полученного из AbsListView, и клонирование всего кода ListView. Не малый подвиг.

Еще одна мысль состояла в том, чтобы переопределить onTouchEvent ListView (событие MotionEvent), взять матрицу вращения, построенную в draw (mRotationMatrix), событие вызова.transform (mRotationMatrix) и в соответствии с документами преобразует все точки в «событии» в соответствии с матрицей (примечание: это API уровня 11, мне нужно поддерживать API уровня 10, но я возьму все, что смогуна данный момент). Ну, использование event.transform (), кажется, не улучшает ситуацию. Мне пришло в голову, что матрица вращения, которую я получаю после вызова Camera.rotateX (), вероятно, не включает матрицу перспективы.

Пошёл искать API для получения матрицы перспективы android muЯ должен был где-то использовать для рисования видов в перспективе, но не нашел.Даже копался в Skia, чтобы посмотреть, смогу ли я где-нибудь найти перспективную матрицу.Я видел ссылки для проверки того, была ли матрица перспективной или нет (проверка kPerspective_Mask), но мне еще не удалось найти жестко заданную матрицу перспектив.

Любые другие идеи о том, как попытаться заставить выбор ListView работатьправильно, даже когда он вращается?

спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...