2010-11-07 5 views
21

Je n'ai pas trop de succès en appliquant des animations aux vues à l'intérieur d'un RemoteViews. Par souci de simplicité, disons que j'ai un widget avec ImageView et Button. En cliquant sur le bouton, je veux ajouter une animation simple à l'ImageView (une rotation par exemple).Widgets Android: Animations sur RemoteViews?

Comme je ne peux pas obtenir une référence en utilisant findViewById() comme dans un Activity et RemoteViews n'a pas de setter pour une animation, je ne suis pas sûr de ce que je devrais faire.

Je pense à remplacer les RemoteViews pour le widget avec une nouvelle mise en page, similaire à l'original mais celui-ci a l'animation déjà chargée. Puis-je faire ceci? Est-il possible d'intégrer une animation dans une mise en page?

code serait quelque chose comme ça pour le 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); 

Puis, en RotateService:

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

Toute autre suggestion?

Répondre

-1

Avez-vous essayé d'utiliser un LayoutAnimation défini dans xml. C'est la seule façon que j'ai trouvé pour ajouter n'importe quel effet d'animation à mon appwidget. L'inconvénient est que vous ne pouvez pas contrôler l'animation, donc à chaque fois que la mise en page du widget est rechargée, c'est-à-dire une mise à jour OnUpdate, l'animation définie en XML se déclenchera.

C'est correct dans certaines circonstances mais pas toutes. Comme son nom l'indique, LayoutAnimations est appliqué aux Layouts, il est donc facile de spécifier les Vues que vous voulez animer en les imbriquant dans leur propre Layout. J'ai utilisé LinearLayout dans mon cas et ça a bien fonctionné.

Voir Picz sur le marché pour une démonstration de cela.

+1

votre Picz pas libre, pouvez-vous donner plus de détails, merci – pengwang

+0

CONFIRMÉS, cette vieille école 'layoutAnimation', [tel que décrit dans ce article] (http://knowledgefolders.com/akc/display?url=displaynoteimpurl&ownerUserId=satya&reportId=2946) fonctionne sur appwidgets. Notez qu'il sera lu sur chaque rafraîchissement de widget complet, donc il ne convient vraiment que comme réaction à l'entrée de l'utilisateur et devrait être désactivé après un certain délai. – user1643723

5
  1. Créez une animation personnalisée.
  2. Créer ProgressBar et définir dans android: indeterminateDrawable votre animation.
  3. Ajouter ProgressBar à votre disposition widget et le rendre visible (invisible)
+0

Etes-vous sûr que cela fonctionne pour AppWidgets? –

Questions connexes