2010-04-02 17 views
10

Quiero utilizar una animación en un widget de página de inicio, es decir, un AppWidgetProvider. Tenía la esperanza de utilizar la técnica de "Animación de fotogramas":¿Hay alguna manera de animar en un widget de inicio?

http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation

la que he utilizado con éxito en una actividad. Pero no puedo traducir ese código a un AppWidgetProvider.

Básicamente, en un AppWidgetProvider, creo y trabajo con un objeto RemoteViews, que AFAIK no me proporciona un método para obtener una referencia a un ImageView en el diseño para que llame a start() en la animación. Tampoco hay un controlador ni una devolución de llamada para cuando se muestra el widget, así que puedo hacer la llamada start().

¿Hay alguna otra forma de hacerlo? Supongo que probablemente pueda hacer la animación solo con onUpdate() llamadas muy rápidas en el widget, pero eso parece muy costoso.

Respuesta

5

No animar los widgets de la aplicación, a menos que escriba su propia aplicación de pantalla de inicio.

Tiene razón en que no tiene manera de manipular un AnimationDrawable o un Animation para que funcionen con un widget de aplicación.

También tiene la razón de que "las llamadas onUpdate() muy rápidas en el widget ... parecen terriblemente caras", porque así es. Las actualizaciones de los widgets de la aplicación implican la comunicación entre procesos, entre su AppWidgetProvider y el proceso que aloja la pantalla de inicio. Este sistema está diseñado para actualizaciones cada 30 minutos aproximadamente, no a 30 fotogramas por segundo.

+1

Si quiero crear un botón de animación como icono de actualización en la aplicación TripeAdvisor, ¿qué debo hacer? –

+0

¿Esto incluye animaciones simples que están dentro de la API de Android? Por ejemplo, un dibujo de barra de progreso personalizado que hace girar una imagen de la aplicación? ¿Qué es posible y qué no es posible? –

+0

@androiddeveloper: Básicamente, cualquier animación que pueda expresar en el recurso de diseño que usa para 'RemoteViews' debería funcionar. Todo lo que requiera que invoque métodos sobre vistas, animaciones, etc. no lo hará. Además, la animación continua puede ser vista negativamente por el usuario, por razones de poder y distracción. – CommonsWare

6

Actualmente estoy creando un widget que "necesita" animación de sprite, y he puesto una publicación en el blog sobre cómo animate home widget. Sí, es costoso de hacer, entonces lo hago solo cuando se necesita el widget. Por cierto, la animación original de Android no es compatible con vistas remotas.

Editar:

Demo Project is up.

5

un widget que está disponible para su uso en un RemoteView es la ProgressBar. Se animará a sí mismo y no masticará recursos. Una ProgressBar determinante que es un cuadrado se superpondrá bastante bien en un appwidget de pantalla de inicio. Ver sample code from Android site

4

Otra opción para animar un widget es el uso de ViewFlipper, donde se puede utilizar inAnimation y outAnimation:

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:flipInterval="5000" 
      android:autoStart="true" 
      android:inAnimation="@android:anim/fade_in" 
      android:outAnimation="@android:anim/fade_out" 
      android:animateFirstView="true"/> 
2

Crear animación personalizada. Crear ProgressBar y establecer en Android: indeterminadoDibuja tu animación. Agregue ProgressBar a su diseño de widgets y haga que sea visible (invisible)

Cuestiones relacionadas