Android: анимация анимации растрового изображения

Мое приложение реализует собственные спрайты, вызывая следующее в onDraw() моего представления:

  canvas.drawBitmap(sprite.getBitmap(), sprite.getX(), sprite.getY(), null); 

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

Например, когда происходит столкновение, я хотел бы воспроизвести анимацию взрыва. Моя идея состояла в том, чтобы заменить обычное растровое изображение спрайта на растровое изображение взрыва PNG и использовать анимацию «tween animation» для Android, чтобы взрыв увеличился.

Но пример анимации Android tween предполагает, что у вас есть ImageView определенный где-то статически в вашей конфигурации XML.

Есть ли способ анимировать растровое изображение, как рисованное в onDraw() с использованием анимации анимации? Или мне нужно преобразовать мои спрайты, чтобы использовать какой-то ImageView ? Если последнее, можете ли вы указать мне пример правильной анимации спрайтов в Android?

благодаря

    Я создал универсальный Tween Engine в java, который вы можете использовать для анимации всего, включая ваши спрайты. Он оптимизирован для Android и игр, потому что он не выделяет ничего во время выполнения, чтобы избежать сбора мусора. Кроме того, Tweens объединены, так что действительно: никакой сборки мусора вообще!

    Вы можете увидеть полную демонстрацию здесь как приложение для Android, или здесь как HTML-страницу WebGL (требуется Chrome)!

    Все, что вам нужно сделать, это реализовать интерфейс TweenAccessor чтобы добавить поддержку Tween для всех ваших спрайтов. Вам даже не нужно менять свой класс Sprite, просто создайте класс SpriteTweenAccessor который реализует TweenAccessor<Sprite> , и зарегистрируйте его на движке при инициализации. Просто взгляните на страницу Wiki на GetStarted 😉

    http://code.google.com/p/java-universal-tween-engine/

    логотип

    Я также создаю визуальный редактор временной шкалы, который может быть встроен в любое приложение. Он будет иметь временную шкалу, похожую на инструмент разработки Flash и Expression Blend (инструмент Silverlight dev).

    Весь движок документирован (все общедоступные методы и классы имеют подробный javadoc), и синтаксис очень похож на движок TweenMax / TweenLite от Greensock, который используется во Flash мире. Обратите внимание, что он поддерживает каждое уравнение ослабления Роберта Пеннера.

     // Arguments are (1) the target, (2) the type of interpolation, // and (3) the duration in seconds. Additional methods specify // the target values, and the easing function. Tween.to(mySprite, Type.POSITION_XY, 1.0f).target(50, 50).ease(Elastic.INOUT); // Possibilities are: Tween.to(...); // interpolates from the current values to the targets Tween.from(...); // interpolates from the given values to the current ones Tween.set(...); // apply the target values without animation (useful with a delay) Tween.call(...); // calls a method (useful with a delay) // Current options are: yourTween.delay(0.5f); yourTween.repeat(2, 0.5f); yourTween.repeatYoyo(2, 0.5f); yourTween.pause(); yourTween.resume(); yourTween.setCallback(callback); yourTween.setCallbackTriggers(flags); yourTween.setUserData(obj); // You can of course chain everything: Tween.to(...).delay(1.0f).repeat(2, 0.5f).start(); // Moreover, slow-motion, fast-motion and reverse play is easy, // you just need to change the speed of the update: yourTween.update(delta * speed); 

    Конечно, ни один движок анимации не был бы полным без возможности создания мощных последовательностей 🙂

     Timeline.createSequence() // First, set all objects to their initial positions .push(Tween.set(...)) .push(Tween.set(...)) .push(Tween.set(...)) // Wait 1s .pushPause(1.0f) // Move the objects around, one after the other .push(Tween.to(...)) .push(Tween.to(...)) .push(Tween.to(...)) // Then, move the objects around at the same time .beginParallel() .push(Tween.to(...)) .push(Tween.to(...)) .push(Tween.to(...)) .end() // And repeat the whole sequence 2 times // with a 0.5s pause between each iteration .repeatYoyo(2, 0.5f) // Let's go! .start(); 

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

    Вы можете сделать анимацию анимации без ImageView идущей из xml-файла, но на самом деле это действительно будет представление в вашей иерархии представлений.

    Рисунок, который вы делаете на вашем Canvas , непрозрачен для иерархии представлений. Я думаю, у вас есть два варианта:

    1. Накладывайте ImageView поверх своего пользовательского представления и анимации, используя анимацию анимации.
    2. Используйте процедуры рисования Canvas , чтобы оживить ваш взрыв.

    Я бы сказал, что использование подпрограмм Canvas , наряду с их преобразованиями maxtrix, имеет смысл, учитывая, что у вас, вероятно, уже есть поток анимации в вашем приложении.

    Вы можете рисовать и оживлять свой взрыв в Adobe Flash, экспортировать спрайты с помощью swfSheet или аналогичные, а затем использовать анимацию Frame

    Если вы создаете игру, вы можете использовать Vectors (Mathematical) для обновления положения ваших изображений, а затем рисовать с помощью getX и getY. Вы должны итерировать и обновлять этот вектор в определенном направлении с некоторой скоростью.

    Эти векторы не являются родными (Game APIs).

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

    Для игр неплохо иметь компоненты, такие как ImageViews для анимации. Им нужна система для подсчета всех макетов снова и снова с течением времени.

    Intereting Posts
    Неверная ошибка сертификата и httpclient на Android Проблема с BroadcastReceiver (ошибка зарегистрированного приемника) Пример общих предпочтений Android Android.view.InflateException: двоичная строка XML-файла # 12: ошибка раздувания класса <unknown> Пользовательский поисковый барабан Блокировка / разблокировка экрана Android программно Создайте большой Jar (рабочий стол) проекта android / desktop gdx Bambuser ffmpeg – «arm-linux-androideabi-gcc не может создать исполняемый файл». GetChildFragmentManager () не может быть разрешен или не может быть указан Доступ / обновление данных на сервере из приложения Android с помощью веб-API, предоставляемого веб-разработчиком? Как создать мультиобъективы или предварительный просмотр с помощью одной камеры в Android Как управлять ПК-мышью с устройства Android без клиентского сервера Как я могу правильно контролировать ориентацию сцены на Android с помощью AIR mobile? Создание ключа API для открытия карты Google IllegalStateException: <MyFragment> в настоящее время отсутствует в FragmentManager