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

Виджеты Android: анимация на RemoteViews?

У меня нет слишком большого успеха, применяя анимацию к представлениям внутри RemoteViews.

Для простоты, допустим, у меня есть виджет с ImageView и a Button. При нажатии кнопки я хочу добавить простую анимацию в ImageView (например, поворот).

Так как я не могу получить ссылку, используя findViewById(), как в Activity, а RemoteViews не имеет установки для анимации, я не уверен, что мне делать.

Я подумываю о замене RemoteViews для виджета новым макетом, похожим на оригинал, но у этого уже есть уже загруженная анимация. Я могу сделать это? Возможно ли внедрить анимацию в макет?

Код будет примерно таким же, как для 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);

Затем в RotateService:

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

Любое другое предложение?

4b9b3361

Ответ 1

  • Создать пользовательскую анимацию.
  • Создайте ProgressBar и установите в android: indeterminateDrawable анимацию.
  • Добавьте ProgressBar в свой макет виджетов и сделайте его видимым (невидимым).

Ответ 2

Пробовали ли вы использовать LayoutAnimation, определенный в xml. Это единственный способ добавить какой-либо эффект анимации в мой appwidget. Недостатком является то, что вы не можете управлять анимацией, поэтому каждый раз, когда макет виджета перезагружается, то есть OnUpdate, анимация, определенная в XML, срабатывает.

В некоторых случаях это нормально, но не все.

Как следует из названия, LayoutAnimations применяются к макетам, поэтому легко указать, какие виды вы хотите анимировать, вложив их в свой собственный макет. Я использовал LinearLayout в моем случае, и он работал нормально.

См. Picz на рынке для демонстрации этого.