Применение физики к объектам Android View
В настоящее время у меня есть приложение для Android, которое использует собственные андроидные представления для пользовательского интерфейса (например, изображения/кнопки и т.д.)
Хотя это приложение не игра, не требует какой-либо тяжелой графики или OpenGL, я бы хотел включить небольшое физическое взаимодействие. Ничто не слишком значимо, но может показаться незначительными столкновениями/отскоками, замедлением/ускорением или, возможно, трением.
Можно ли имитировать либо в рамках андроида, либо с помощью внешней библиотеки физики, такой как jbox2d, без использования всего игрового движка (например, andengine, libgx и т.д.).
P.S. это для API 15 +
Спасибо всем.
Ответы
Ответ 1
Самый простой способ (не тот гибкий) использует ViewPropertyAnimator.
С его помощью вы можете анимировать свойства даже параллельно. Возможно, вы хотите изменить маркер представления от родительского слева. Вы можете изменить это поле, установив время для перемещения и другое. Несколько примеров в этом блоге
ValueAnimator - другая альтернатива, которая по умолчанию использует AccelerateDecelerateInterpolator, и вы должны предоставить код, который изменяет требуемое свойство. Этого официального руководства может быть достаточно, чтобы заставить их работать.
Ответ 2
то, что вы хотите, совершенно невозможно - ваши варианты:
- вы можете подделывать такие вещи, как отскоки анимации.
- вы можете реализовать совершенно новый ui lib
- вы используете openGL, что бы я сделал.
Ответ 3
Я думаю, что это может быть достигнуто, по крайней мере, в какой-то момент.
У вас есть доступ к довольно полному Анимация API. Последнее, вместе с некоторыми оценками, расстояниями и, возможно, расчетами ориентации устройства, может использоваться для имитации почти всех случаев, о которых вы упомянули.
Вы можете создать ускорение/замедление, изменение формы... и почти любую анимацию, которую вы хотите.
Как вы можете добиться того, что вы просите:
Имея разные анимации, один за другим, создавая и применяя их динамически в зависимости от состояния элемента представления. И по состоянию, я имею в виду "физическое состояние": падение, столкновение, контакт с другим видом и т.д....
Ответ 4
Пока вы можете установить/обновить положение элементов интерфейса каждого кадра (например, с помощью View.setTranslationX()), вы можете это сделать.
Анимация пользовательского интерфейса вручную означает сохранение сопоставления между элементами пользовательского интерфейса и физическими (например, jbox2d) телами, которые соответствуют им. Затем вы обновляете соответствующие позиции элементов пользовательского интерфейса, чтобы имитированные тела имели каждый кадр (например, body.getPosition()).
В приложениях, управляемых событиями, что-то вроде объекта Timer полезно для планирования обновлений физики.