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

Анимация виджета для домашних животных Android

Я занимаюсь созданием виджета, поддерживающего анимацию, в идеале с помощью рамки android.view.animation, в противном случае путем установки свойств на удаленных представлениях в коде, запущенном из фоновой службы.

Есть ли у кого-нибудь опыт в любом из этих подходов, и что я пытаюсь сделать, или я направляюсь в тупик?

4b9b3361

Ответ 1

Фактически возможно анимировать виджеты RemoteView. Проблема в том, что это супер ограничительный, который является конструктивным из-за последствий для безопасности выполнения пользовательского кода в системном процессе.

Я имею в виду, что Android будет работать только с анимациями, которые выражаются в файлах res/anim xml, привязанных к макетам через xml. Некоторые виджеты RemoteView поддерживают этот

Примером этого является виджет приложения новостей и погоды, который поставляется на биржевой системе Android. То, что он делает, это использовать ViewFlipper для циклического просмотра каждой новости каждые 10 секунд или около того.

    <ViewFlipper android:layout_width="match_parent" android:layout_height="wrap_content" android:measureAllChildren="true" android:flipInterval="10000" android:autoStart="true"
android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out" android:animateFirstView="true">
      <TextView android:id="@+id/Description1TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/>
      <TextView android:id="@+id/Description2TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/>
      <TextView android:id="@+id/Description3TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/>
      <TextView android:id="@+id/Description4TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/>
    </ViewFlipper>

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

Наконец, Android медленно добавляет поддержку анимированных просмотров в каждой версии. Например, TransitionDrawables (cross-fading selector drawable) не пересекаются до Android 3.0.

Ответ 2

У вас могут быть только простые анимации, такие как fadeIn или fadeOut на вашем виджете, это очень просто, вам не нужны анимации макета, просто используйте ViewFlipper (мне потребовалось 3 дня расследования, чтобы узнать, что это так просто).

Тем не менее, невозможно написать что-то действительно отличное, не используя пользовательские пусковые установки

Ответ 3

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

В виджет блока Mario Coin, я использую такую ​​технику для анимации, вы можете проверить исходный код: http://code.google.com/p/mario-coin-block/source/browse/trunk/MarioWidget.CoinBlock/src/com/gueei/mario/coinBlock/view/CoinBlockView.java

В принципе, идея состоит в том, чтобы вручную рисовать на экране с растровым изображением, и заменять растровое изображение BitmapView с помощью RemoveViews Call.

Ответ 4

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

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

профи - высшее качество анимация, можно управлять с фона

cons - не интерактивный, заменяет пользовательские обои... и трудно удовлетворить каждый вкус

Ответ 5

Анимация невозможна в RemoteViews, а обновления RemoteViews могут происходить со скоростью один раз в 30 минут (или вручную)...

В любом случае вы можете попробовать следующую ссылку: is-there-a-way-to-animate-on-a-home-widget