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