Android Widgets: Animations on RemoteViews ?

aromero picture aromero · Nov 7, 2010 · Viewed 18.7k times · Source

I'm not having too much success applying animations to views inside a RemoteViews.

For the sake of simplicity, let's say I have a widget with an ImageView and a Button. When clicking the button, I want to add a simple animation to the ImageView (a rotation for example).

Since I can't get a reference using findViewById() like in an Activity and RemoteViews doesn't have a setter for an animation, I'm not sure what should I do.

I'm thinking of replacing the RemoteViews for the widget with a new layout, similar to the original but this one has the animation already loaded. Can I do this? Is it possible to embed an animation in a layout?

Code would be something like this for the 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);

Then in RotateService:

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

Any other suggestion?

Answer

Yomodo picture Yomodo · Nov 29, 2012
  1. Create custom animation.
  2. Create ProgressBar and set in android:indeterminateDrawable your animation.
  3. Add ProgressBar to your widget layout and make it visible(invisible)