Подтвердить что ты не робот

Применение физики к объектам Android View

В настоящее время у меня есть приложение для Android, которое использует собственные андроидные представления для пользовательского интерфейса (например, изображения/кнопки и т.д.)

Хотя это приложение не игра, не требует какой-либо тяжелой графики или OpenGL, я бы хотел включить небольшое физическое взаимодействие. Ничто не слишком значимо, но может показаться незначительными столкновениями/отскоками, замедлением/ускорением или, возможно, трением.

Можно ли имитировать либо в рамках андроида, либо с помощью внешней библиотеки физики, такой как jbox2d, без использования всего игрового движка (например, andengine, libgx и т.д.).

P.S. это для API 15 +

Спасибо всем.

4b9b3361

Ответ 1

Самый простой способ (не тот гибкий) использует ViewPropertyAnimator.

С его помощью вы можете анимировать свойства даже параллельно. Возможно, вы хотите изменить маркер представления от родительского слева. Вы можете изменить это поле, установив время для перемещения и другое. Несколько примеров в этом блоге

ValueAnimator - другая альтернатива, которая по умолчанию использует AccelerateDecelerateInterpolator, и вы должны предоставить код, который изменяет требуемое свойство. Этого официального руководства может быть достаточно, чтобы заставить их работать.

Ответ 2

то, что вы хотите, совершенно невозможно - ваши варианты:

  • вы можете подделывать такие вещи, как отскоки анимации.
  • вы можете реализовать совершенно новый ui lib
  • вы используете openGL, что бы я сделал.

Ответ 3

Я думаю, что это может быть достигнуто, по крайней мере, в какой-то момент.

У вас есть доступ к довольно полному Анимация API. Последнее, вместе с некоторыми оценками, расстояниями и, возможно, расчетами ориентации устройства, может использоваться для имитации почти всех случаев, о которых вы упомянули.

Вы можете создать ускорение/замедление, изменение формы... и почти любую анимацию, которую вы хотите.

Как вы можете добиться того, что вы просите:
Имея разные анимации, один за другим, создавая и применяя их динамически в зависимости от состояния элемента представления. И по состоянию, я имею в виду "физическое состояние": падение, столкновение, контакт с другим видом и т.д....

Ответ 4

Пока вы можете установить/обновить положение элементов интерфейса каждого кадра (например, с помощью View.setTranslationX()), вы можете это сделать.

Анимация пользовательского интерфейса вручную означает сохранение сопоставления между элементами пользовательского интерфейса и физическими (например, jbox2d) телами, которые соответствуют им. Затем вы обновляете соответствующие позиции элементов пользовательского интерфейса, чтобы имитированные тела имели каждый кадр (например, body.getPosition()).

В приложениях, управляемых событиями, что-то вроде объекта Timer полезно для планирования обновлений физики.