2013-08-22 15 views
9

Görünümün dolgudaki değişikliği canlandırmak istiyorum. Çeviri animasyonunun dinlenme yeri, uygulamak istediğim dolgu ile aynı.Görünümün dolgusunda bir değişikliği nasıl canlandırıyorsunuz?

TranslateAnimation moveleft = new TranslateAnimation(Animation.ABSOLUTE, 0.0f, 
        Animation.ABSOLUTE, PADDING, Animation.ABSOLUTE, 
        0.0f, Animation.ABSOLUTE, 0.0f); 

moveLeft.setDuration(500); 
moveLeft.setFillAfter(true); 

Bu, görünümün animasyonunu başlatır, ardından dolguyu ayarlar. Bu tam olarak çalışmıyor çünkü grafiksel bir aksama neden oluyor.

v.startAnimation(moveleft); 
v.setPadding(PADDING, 0, 0,0); 

cevap

3

Dolgularınızı hemen ayarlamak yerine, animasyon tamamlandıktan sonra dolgu ayarlamak için bir animasyon dinleyicisi kullanmayı denemiyorsunuz?

v.setAnimationListener(new Animation.AnimationListener() { 
    ... 
    @Override 
    public void onAnimationEnd(){ 
     v.setPadding(PADDING, 0, 0,0); 
    } 
    ... 
}); 
v.startAnimation(moveleft); 
+0

Bu uygulamayı daha önce denedim, ancak yine de benzer bir grafik hatasıyla sonuçlandı. Ancak, onu düzeltmenin bir yolunu buldum. Dolgulamayı ayarlamadan önce animasyonlu görünümde '.clearAnimation()' yi aradım. Animasyon bittikten sonra '.onAnimationEnd()' deki kodu aldım. Bu durum böyle görünmüyor. –

+0

Ayrıca '.setFillAfter()' öğesini kaldırdım. –

34

onun gerçekten basit ve

biz sol, üst ve alt dolgu olarak sırasıyla _6dp, _6dp ve 0 nerede _20dp için sağ dolgu değiştirmek zorunda demek karıştırmayan Kullanım ValueAnimator.

ofInt(), varagrs türüdür. Canlandıracağımız gerek değer KeyValue çifti (ARG1 = akım değerinin, arg2 = hedef değeri, ............) Burada

biz gittikçe içinde pass

ValueAnimator animator = ValueAnimator.ofInt(view.getPaddingRight(), _20dp); 
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator valueAnimator){ 
     view.setPadding(_6dp, _6dp, (Integer) valueAnimator.getAnimatedValue(), 0); 
    } 
}); 
animator.setDuration(200); 
animator.start(); 
+2

Çok iyi bir çözüm +1 –

İlgili konular