2010-11-07 20 views
21

No estoy teniendo demasiado éxito aplicando animaciones a vistas dentro de un RemoteViews.Android Widgets: ¿Animaciones en RemoteViews?

En aras de la simplicidad, digamos que tengo un widget con un ImageView y un Button. Al hacer clic en el botón, quiero agregar una animación simple a ImageView (una rotación, por ejemplo).

Como no puedo obtener una referencia usando findViewById() como en un Activity y RemoteViews no tengo un setter para una animación, no estoy seguro de qué hacer.

Estoy pensando en reemplazar las RemoteViews para el widget con un nuevo diseño, similar al original, pero este tiene la animación ya cargada. ¿Puedo hacer esto? ¿Es posible incrustar una animación en un diseño?

Código sería algo como esto para el WidgetProvider:

Intent intent = new Intent(context, RotateService.class); 
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); 

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.a_widget); 
views.setOnClickPendingIntent(R.id.a_button, pendingIntent); 

appWidgetManager.updateAppWidget(appWidgetId, views); 

Luego, en RotateService:

ComponentName myWidget = new ComponentName(this, MyWidget.class); 
AppWidgetManager manager = AppWidgetManager.getInstance(this); 
RemoteViews newViews = buildNewRemoteViewsWithAnimation(); 
manager.updateAppWidget(myWidget, newViews); 

Cualquier otra sugerencia?

Respuesta

-1

Ha intentado utilizar LayoutAnimation definido en xml. Esta es la única forma que he encontrado para agregar cualquier tipo de efecto de animación a mi appwidget. Lo malo es que no puede controlar la animación, por lo que cada vez que se vuelva a cargar el diseño del widget, es decir, OnUpdate, la animación definida en XML se activará.

Esto está bien en algunas circunstancias, pero no en todas.

Como su nombre indica, LayoutAnimations se aplica a los diseños, por lo que es fácil especificar qué vistas desea animar anidando en su propio diseño. Usé LinearLayout en mi caso y funcionó bien.

Vea a Picz en el mercado para una demostración de esto.

+1

su Picz no es libre, se puede dar más detalles, gracias a que – pengwang

+0

confirmado, que la vieja escuela 'layoutAnimation', [tal como se describe en este artículo] (http://knowledgefolders.com/akc/display?url=displaynoteimpurl&ownerUserId=satya&reportId=2946) funciona en appwidgets. Tenga en cuenta que se reproducirá en cada actualización de widget completa, por lo que solo es realmente adecuado como reacción a la entrada del usuario y se debe desactivar después de un tiempo de espera excedido. – user1643723

5
  1. Crear animación personalizada.
  2. Crear ProgressBar y establecer en Android: indeterminadoDibuja tu animación.
  3. Añadir ProgressBar para su diseño widget y hacerla visible (invisible)
+0

¿Estás seguro de que funciona para AppWidgets? –

Cuestiones relacionadas