2013-03-23 4 views
19

Desidero utilizzare un ValueAnimator per fare lampeggiare il colore del testo di TextView due volte tra due colori diversi, ma voglio creare l'animazione in XML. Non riesco a trovare alcun esempio Qualsiasi aiuto sarà apprezzato.Utilizzo di un valoreAnimatore per rendere un TextView lampeggiare colori diversi

Aggiornamento

Il codice sotto funziona perfettamente. Il colore cambia da nero a blu, da blu a nero, da nero a blu e da blu a nero con 500 ms tra ogni ripetizione inversa. Sto comunque cercando di farlo funzionare da un file xml dell'animatore.

ValueAnimator colorAnim = ObjectAnimator.OfInt(objectToFlash, "textColor", (int)fromColor, (int)toColor); 
colorAnim.SetDuration(500); 
colorAnim.SetEvaluator(new ArgbEvaluator()); 
colorAnim.RepeatCount = 3; 
colorAnim.RepeatMode = ValueAnimatorRepeatMode.Reverse; 

xml

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
     android:propertyName="textColor"   
     android:duration="500" 
     android:valueFrom="@color/black" 
     android:valueTo="@color/ei_blue" 
     android:repeatCount="3" 
     android:repeatMode="reverse" /> 

Codice

ValueAnimator anim = (ObjectAnimator)AnimatorInflater.LoadAnimator(Activity, Resource.Animator.blinking_text); 
anim.SetTarget(objectToFlash); 

utilizzando XML fa sì che il colore del colore del testo 's il TextView a cambiare tutte le volte che è possibile all'interno di 500ms.

Aggiornamento Penso che quello che ho bisogno sono fotogrammi chiave per imitare in XML che cosa la chiamata OfInt sta facendo a livello di codice. Cercando questo ora ma senza fortuna finora.

risposta

29

Prova questo:

private static final int RED = 0xffFF8080; 
private static final int BLUE = 0xff8080FF; 

ValueAnimator colorAnim = ObjectAnimator.ofInt(myTextView, "backgroundColor", RED, BLUE); 
     colorAnim.setDuration(3000); 
     colorAnim.setEvaluator(new ArgbEvaluator()); 
     colorAnim.setRepeatCount(ValueAnimator.INFINITE); 
     colorAnim.setRepeatMode(ValueAnimator.REVERSE); 
     colorAnim.start(); 

O provare questo metodo non testati tramite XML: * res/animatore/property_animator.xml *

<set > 

<objectAnimator 
    android:propertyName="backgroundColor" 
    android:duration="3000" 
    android:valueFrom="#FFFF8080" 
    android:valueTo="#FF8080FF" 
    android:repeatCount="-1" 
    android:repeatMode="reverse" /> 
</set> 

ora nel codice Java:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, 
R.anim.property_animator); 
set.setTarget(myTextView); 
set.start(); 
+0

Funziona, grazie ma come sarebbe l'animatore xml? – wheels53

+0

aggiornato la mia risposta, si prega di controllare e dare un feedback. –

+0

si prega di leggere anche http://developer.android.com/guide/topics/resources/animation-resource.html –

3

Il problema che si descrive è che l'animatore di oggetti specificato in XML non sta assegnando correttamente ArgbEvaluator per l'interpolazione dei colori.

Per risolvere il problema, creare l'animatore di oggetti XML da interpolare tra i colori come desiderato. Poi, nel codice sorgente, effettuare le seguenti garantire che il valutatore utilizzato dal animatore è un ArgbEvaluator:

ObjectAnimator colorAnimator = (ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.color_rotation); 
colorAnimator.setTarget(objectToFlash); 
colorAnimator.setEvaluator(new ArgbEvaluator()); 
colorAnimator.start(); 
2

partire da LEVEL API> 21 lo stesso effetto può essere fatta con metodo statico ObjectAnimator.ofArgb simili:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
    private void animateText(TextView text) { 
     ObjectAnimator animator = ObjectAnimator.ofArgb(text, "textColor", Color.WHITE, Color.RED); 
     animator.setDuration(500); 
     animator.setRepeatCount(3); 
     animator.setRepeatMode(ValueAnimator.REVERSE); 
     animator.start(); 
    } 
Problemi correlati