2013-03-23 15 views
19

TextView'un iki farklı renk arasında iki kez yanıp sönen metin rengi yapmak için ValueAnimator kullanmak istiyorum ancak Animasyonu XML'de oluşturmak istiyorum. Hiçbir örnek bulamıyorum. Herhangi bir yardım takdir edilecektir.Bir TextView yapmak için bir ValueAnimator kullanarak farklı renkler

Güncelleme

kod aşağıda mükemmel çalışır. Renk, her bir ters tekrar arasında siyahtan maviye, maviden siyaha, siyahtan maviye ve maviden siyamaya 500 ms ile değişir. Ancak bunu bir animatör xml dosyasından çalışmaya çalışıyorum.

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" /> 

Kod

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

xml kullanmak, 500ms içinde mümkün olduğu kadar çok kez değiştirmeye TextView 'in metin rengi rengini neden olur.

Güncelleme ben Keyframes OfInt çağrı programlı ne yaptığını xml taklit etmek olan gerekenleri düşünüyorum. Şimdilik bunu denemek ama şimdiye kadar hiç şans yok.

cevap

29

bu deneyin:

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(); 

Ya xml üzerinden bu denenmemiş yöntemi deneyin: * res/animatör/property_animator.xml * Java kodunda artık

<set > 

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

:

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

Bu işe yarıyor, teşekkürler ama animatör xml neye benziyordu? – wheels53

+0

cevabımı güncelledi, lütfen kontrol edin ve geri bildirim verin. –

+0

ayrıca http://developer.android.com/guide/topics/resources/animation-resource.html –

3

Tanımladığınız sorun, XML'de belirtilen nesne animatörüdür. renk enterpolasyonu için ArgbEvaluator'ı doğru olarak atamaz.

Sorunu çözmek için, istediğiniz gibi renkler arasında geçiş yapmak için nesne animatörü XML'yi oluşturun.

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

API LEVEL başlayarak> 21 aynı etki böyle statik yöntemle ObjectAnimator.ofArgb ile yapılabilir:

Ardından, kaynak kodunda, animatör tarafından kullanılan değerlendirici bir ArgbEvaluator olmasını sağlamak için aşağıdakileri yapın
@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(); 
    } 
İlgili konular