2013-12-17 21 views
34

Ho animazioneAnimazione Android Alpha

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator"> 
    <alpha 
     android:fromAlpha="0.2" 
     android:toAlpha="1.0" 
     android:duration="500"/> 
</set> 

e ImageView

<ImageView 
    android:id="@+id/listViewIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/settings" 
    android:alpha="0.2"/> 

e il codice:

final Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha); 
final ImageView iv = (ImageView) findViewById(R.id.listViewIcon); 
anim .setFillAfter(true); 
iv.startAnimation(anim); 

Così all'inizio ho ImageView con alfa 0.2 e al fine voglio avere ImageView con alpha 1. Ma non funziona così - quando l'animazione inizia più alpha viene aggiunto e animazione finis h con alpha 0.2

Cosa devo cambiare per animare la mia immagine da 0,2-> 1?

Ho controllato con impostazioni diverse - Ho impostato android: alpha = "1.0", fromAlpa = "1.0" toAlpha = "0.2" funziona come mi aspettavo - da alpha 1 a 0.2. Sembra alpha da ImageView viene moltiplicato per alpha dall'animazione ...

+0

Per impedire alla vista di tornare indietro a 0.2 alpha alla fine, utilizzare l'attributo 'fillAfter': http://developer.android.com/reference/android/view/animation/Animation.html#attr_android:fillAfter – Jave

+0

non è il caso. L'alfa non va a 1. Quando eseguo l'animazione da 1-> 0.2, funziona bene e rimane a 0.2 (utilizzo riempimento dopo). Quando voglio animare da 0,2 a 1, sfuma a quasi 0 e va a 0,2 – wioskamala

+0

hai impostato 'fillEnabled' su true? – Jave

risposta

64

Prova questa

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f); 
animation1.setDuration(1000); 
animation1.setStartOffset(5000); 
animation1.setFillAfter(true); 
iv.startAnimation(animation1) 
+1

Lo stesso risultato come nel mio esempio ... – wioskamala

+0

visualizza alfa da proprties imageview e app noninsieme dal dispositivo. pulire, compilare e installare di nuovo. perché sta funzionando dalla mia parte –

+0

Non voglio rimuovere alpha - l'immagine dovrebbe essere sbiadita con alpha 0.2. L'applicazione sta facendo alcune cose e quando è pronto voglio avere la mia immagine animata in alpha 1. – wioskamala

1
<ImageView 
    android:id="@+id/listViewIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/settings"/> 

Rimuovere android:apha=0.2 da XML> ImageView.

1

Hm ...

La cosa è sbagliato, e forse nel corretto funzionamento delle animazioni nella API di Android.

Il fatto è che quando si imposta nel codice valore alfa 0.2f si basa sulle impostazioni del file XML per Android vuol dire che:

0.2f = 0.2f of 0.2f (20% from 100%) ie from 0.2f/5 = 0.04f 
1f = 0.2f 

Quindi l'animazione in realtà funziona da 0,04 f per 0.2f

bandiera setFillAfter(true) funziona sicuramente, ma è necessario capire che alla fine dell'animazione ImageView avrà il valore alfa 0.2f invece di uno, perché si specifica 0.2f come marginalmente acc valore eptable nell'animazione (una sorta di massimo canale alfa).

Quindi, se si desidera che il risultato desiderato porti tutta la logica al codice e manipolare le animazioni nel codice anziché determinare in xml.

Si dovrebbe capire che le animazioni dipende direttamente da due cose:

  • LayoutParams di Animated View
  • parametri di animazione.

parametri di animazione manipolare i LayoutParams in setFillAfter \ setFillBefore metodi.

+0

Sì. Hai ragione. Quando cambio i parametri del layout iniziale al mio codice, è stato eseguito come un incantesimo! –

9

Impostazione alfa per 1 prima di iniziare l'animazione ha lavorato per me:

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f); 
animation1.setDuration(500); 
iv.setAlpha(1f); 
iv.startAnimation(animation1); 

almeno sul mio test, non c'è nessun sfarfallamento a causa di impostazione alfa prima di iniziare l'animazione. Funziona perfettamente.

+0

Questo ha funzionato anche per me (modifica: il mio errore, I DO ha un'interferenza XML: android: alpha = "0"). Ci giocherò un po ', ma ho bisogno che inizi a 0, quindi funziona per ora. Grazie. –