2010-04-02 12 views
10

Desidero utilizzare un'animazione su un widget della pagina iniziale, ad esempio un AppWidgetProvider. Speravo di utilizzare la tecnica di "Animation Frame":C'è un modo per animare su un Home Widget?

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

che ho usato con successo in un'attività. Ma non posso tradurre quel codice in un AppWidgetProvider.

Fondamentalmente, in un AppWidgetProvider, creo e lavoro con un oggetto RemoteViews, che AFAIK non mi fornisce un metodo per ottenere un riferimento a un ImageView nel layout affinché io possa chiamare start() sull'animazione. Non c'è anche un gestore o un callback per quando il widget viene visualizzato così posso effettuare la chiamata start().

C'è un altro modo per farlo? Suppongo che io possa probabilmente fare l'animazione da solo con chiamate suUpUpate() molto veloci sul widget, ma sembra terribilmente costoso.

risposta

5

Non animare i widget dell'app, a meno che non si scriva la propria app schermata iniziale.

È corretto che non si abbia modo di manipolare uno AnimationDrawable o un Animation per farli funzionare con un widget dell'app.

Si è anche corretto che "molto veloce suUpUpdate() chiama sul widget ... sembra terribilmente costoso", perché lo è. Gli aggiornamenti ai widget delle app riguardano la comunicazione tra processi, tra il tuo AppWidgetProvider e il processo che ospita la schermata iniziale. Questo sistema è progettato per aggiornamenti ogni 30 minuti circa, non 30 fotogrammi al secondo.

+1

Se voglio creare un pulsante di animazione come l'icona di aggiornamento nell'applicazione TripeAdvisor, cosa devo fare? –

+0

Questo include semplici animazioni che si trovano all'interno dell'API di Android? Ad esempio, un progressbarar personalizzato che gira un'immagine della app? Cosa è possibile e cosa non è possibile? –

+0

@androiddeveloper: in sostanza, qualsiasi animazione che è possibile esprimere nella risorsa di layout che si utilizza per 'RemoteViews' dovrebbe funzionare. Tutto ciò che richiede di chiamare metodi su viste, animazioni, ecc. Non lo farà. Inoltre, l'animazione continua può essere visualizzata negativamente dall'utente, per ragioni di potere e distrazione. – CommonsWare

6

Attualmente sto creando un widget che "necessita" di animazione sprite, e ho inserito un post sul blog su come animate home widget. Sì, è costoso da fare, quindi lo faccio solo quando è necessario il widget. A proposito, l'animazione Android originale non è supportata nelle viste remote.

Edit:

Demo Project is up.

5

Un Widget che è disponibile per l'utilizzo in un RemoteView è il ProgressBar. Si animerà da solo e non masticherà risorse. Un ProgressBar in-determinante che è un quadrato si sovrapporrà piuttosto bene su un appwidget di homescreen. Vedere sample code from Android site

4

Un'altra opzione per animare un widget è l'uso di ViewFlipper, dove si può usare inAnimation e outAnimation:

<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

creare animazioni personalizzate. Crea ProgressBar e imposta su android: indeterminateDrawable your animation. Aggiungi ProgressBar al layout del widget e rendilo visibile (invisibile)

Problemi correlati