Ответ 1
- Создать пользовательскую анимацию.
- Создайте ProgressBar и установите в android: indeterminateDrawable анимацию.
- Добавьте ProgressBar в свой макет виджетов и сделайте его видимым (невидимым).
У меня нет слишком большого успеха, применяя анимацию к представлениям внутри 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);
Любое другое предложение?
Пробовали ли вы использовать LayoutAnimation, определенный в xml. Это единственный способ добавить какой-либо эффект анимации в мой appwidget. Недостатком является то, что вы не можете управлять анимацией, поэтому каждый раз, когда макет виджета перезагружается, то есть OnUpdate, анимация, определенная в XML, срабатывает.
В некоторых случаях это нормально, но не все.
Как следует из названия, LayoutAnimations применяются к макетам, поэтому легко указать, какие виды вы хотите анимировать, вложив их в свой собственный макет. Я использовал LinearLayout в моем случае, и он работал нормально.
См. Picz на рынке для демонстрации этого.