2010-04-02 10 views
10

Ich möchte eine Animation auf einem Homepage-Widget, d. H. Einem AppWidgetProvider verwenden. Ich hatte gehofft, die „Frame Animation“ Technik zu verwenden:Gibt es eine Möglichkeit, auf einem Home Widget zu animieren?

http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation

, die ich erfolgreich in einer Aktivität verwendet haben. Aber ich kann diesen Code nicht in einen AppWidgetProvider übersetzen.

Grundsätzlich, in einem AppWidgetProvider, ich erstelle und arbeite mit einem RemoteViews-Objekt, die AFAIK bietet mir keine Methode, einen Verweis auf ein ImageView im Layout für mich zu erhalten start() auf der Animation. Es gibt auch keinen Handler oder Callback für die Anzeige des Widgets, damit ich den Aufruf von start() ausführen kann.

Gibt es eine andere Möglichkeit, dies zu tun? Ich nehme an, dass ich die Animation wahrscheinlich selbst mit sehr schnellen onUpdate() -Aufrufen am Widget machen kann, aber das scheint furchtbar teuer zu sein.

Antwort

5

Animieren Sie keine App-Widgets, es sei denn, Sie schreiben Ihre eigene Startbildschirm-App.

Sie haben Recht, dass Sie keine Möglichkeit haben, AnimationDrawable oder Animation zu manipulieren, damit sie mit einem App-Widget funktionieren.

Sie sind auch richtig, dass "sehr schnell onUpdate() ruft auf das Widget ... scheint schrecklich teuer", weil es ist. Updates für App-Widgets beziehen sich auf die prozessübergreifende Kommunikation zwischen Ihrem AppWidgetProvider und dem Prozess, der den Startbildschirm hostet. Dieses System ist für Updates alle 30 Minuten oder so konzipiert, nicht 30 Bilder pro Sekunde.

+1

Wenn ich eine Animation Schaltfläche wie Refresh-Symbol in der TripeAdvisor-Anwendung erstellen möchte, was soll ich tun? –

+0

Enthält dies einfache Animationen, die in der Android-API enthalten sind? Zum Beispiel ein benutzerdefiniertes progressBar-Zeichen, das ein Bild der App dreht? Was ist möglich und was ist nicht möglich? –

+0

@androiddeveloper: Grundsätzlich sollten alle Animationen, die Sie in der Layout-Ressource, die Sie für die 'RemoteViews 'verwenden, ausdrücken können. Alles, was erfordert, dass Sie Methoden für Ansichten, Animationen usw. aufrufen, wird dies nicht tun. Außerdem kann eine kontinuierliche Animation vom Benutzer aus Gründen der Leistung und der Ablenkung negativ betrachtet werden. – CommonsWare

6

Ich erstelle gerade ein Widget, das Sprite-Animation "braucht", und ich habe einen Blog-Beitrag auf animate home widget gestellt. Ja, es ist teuer zu tun, also mache ich es nur, wenn das Widget benötigt wird. BTW, ursprüngliche Android-Animation wird nicht in Remote-Ansichten unterstützt.

Edit:

Demo Project is up.

5

Ein Widget, das für die Verwendung in einem Remoteview verfügbar ist, ist die ProgressBar. Es wird sich selbst animieren und wird keine Ressourcen zerkauen. Eine indeterminante ProgressBar, die ein Quadrat ist, wird auf einem Homescreen-Appwidget ziemlich gut überlagert. Siehe sample code from Android site

4

Eine andere Möglichkeit, ein Widget zu animieren, ist die Verwendung von ViewFlipper, wo man inAnimation und outAnimation verwenden:

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:flipInterval="5000" 
      android:autoStart="true" 
      android:inAnimation="@android:anim/fade_in" 
      android:outAnimation="@android:anim/fade_out" 
      android:animateFirstView="true"/> 
2

Erstellen von benutzerdefinierten Animationen. Erstellen ProgressBar und setzen Sie in android: indeterminateDrawable Ihre Animation. Fügen Sie ProgressBar Ihrem Widget-Layout hinzu und machen Sie es sichtbar (unsichtbar)

Verwandte Themen