2013-01-04 17 views
20

Korzystając z tego kodu, mam tylko zanikanie, szukam o dodaniu również zanikania. Dodałem kolejny xml o nazwie "fadeout", ale nie mogę go zintegrować z moim kodem.Animacja zanikanie i wygaszenie

ImageView imageView= (ImageView)findViewById(R.id.imageView); 
Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fadein); 
imageView.startAnimation(fadeInAnimation); 

button1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
imageView.startAnimation(fadeInAnimation); 

XML

<?xml version="1.0" encoding="UTF-8"?> 
    <set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:duration="Your Duration(in milisecond)" 
    android:repeatCount="infinite"/> 
</set> 

Odpowiedz

19

ten jest dobrym przykładem Fade In and Fade Out Animation with Alpha Effect

Animate Fade In Fade Out

zmieniane:

Sprawdź to answer może to pomóc

+0

to nie jest dokładny.: po zanikaniu pokazu obrazu bez efektu zanikania, tak samo dla zaniku. –

31

Oto moje rozwiązanie. Używa AnimatorSet. Biblioteka AnimationSet była zbyt błędna, aby mogła działać. Zapewnia to płynne i nieskończone przejścia pomiędzy efektami wejścia i wyjścia.

public static void setAlphaAnimation(View v) { 
    ObjectAnimator fadeOut = ObjectAnimator.ofFloat(v, "alpha", 1f, .3f); 
    fadeOut.setDuration(2000); 
    ObjectAnimator fadeIn = ObjectAnimator.ofFloat(v, "alpha", .3f, 1f); 
    fadeIn.setDuration(2000); 

    final AnimatorSet mAnimationSet = new AnimatorSet(); 

    mAnimationSet.play(fadeIn).after(fadeOut); 

    mAnimationSet.addListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      super.onAnimationEnd(animation); 
      mAnimationSet.start(); 
     } 
    }); 
    mAnimationSet.start(); 
} 
2

Zgodnie z dokumentacją AnimationSet

Reprezentuje grupę animacji, które powinny być odtwarzane razem. Transformacja każdej pojedynczej animacji składa się razem w jedną transformatę. Jeśli AnimationSet ustawia żadnych właściwości, które jej dzieci również ustawić (na przykład, czas trwania lub fillBefore), wartości AnimationSet zastępują dziecku wartości

AnimationSet mAnimationSet = new AnimationSet(false); //false means don't share interpolators 

Przełęcz true jeśli wszystkie animacje w tym zestawie powinien użyć interpolatora powiązanego z tym zestawem animacji. Podaj fałszywe, jeśli każda animacja powinna używać własnego interpolatora.

ImageView imageView= (ImageView)findViewById(R.id.imageView); 
Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in); 
Animation fadeOutAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out); 
mAnimationSet.addAnimation(fadeInAnimation); 
mAnimationSet.addAnimation(fadeOutAnimation); 
imageView.startAnimation(mAnimationSet); 

Mam nadzieję, że to pomoże.

0

Pracowałem w Kotlin (polecam każdemu), więc składnia może być trochę za krótka. Co mogę zrobić, to po prostu zadzwonić.

  • v.animate() alfa (0F) .duration = 200

myślę, że w Javie, byłoby następujące .: .

  • v.animate() alfa (0f) .setDuration (200)

Spróbuj:

  • prywatne ukrywanie void (Zobacz v, int duration) { v.animate(). Alfa (0f).setDuration (czas trwania) }

  • private void show (zobacz v, int czas) { v.animate() alfa (1f) .setDuration (czas trwania) }