2013-05-28 12 views
31

Potrzebuję wyświetlić przycisk obrazu, który będzie się pojawiał i znikał (i na wejściu i wyjściu itd.) Przezroczystość można ustawić za pomocą setAlpha, ale jak mogę zaniknąć ? Mam na myśli, że nie mogę tego zrobić w innym wątku, ponieważ musisz robić takie rzeczy w wątku UI, prawda?Android: Przejście i wygaszenie widoku

Chyba można to zrobić z animacjami, ale nie znalazłem niczego, bo nie mam żadnego doświadczenia z animacji i tak naprawdę nie wiem czego szukać ...

Właściwie, co ja Naprawdę chce się zrzucić jedno zdjęcie, a drugie jedno, ale domyślam się, że najprostszym sposobem jest umieszczenie pierwszego przycisku obrazu poniżej drugiego i po prostu zanikanie drugiego. Czy istnieje prostszy sposób na zrobienie tego?

+0

Można używać animacji i tworzenia animacji plik 'XML' ze swoim przejścia alfa, a następnie ustaw to do 'ImageButton' – kabuto178

Odpowiedz

56

Oto rozwiązanie używam teraz, który działa na poziomie API niższy niż 12:

AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f); 
anim.setDuration(1000); 
anim.setRepeatCount(NUM_REPEATS); 
anim.setRepeatMode(Animation.REVERSE); 
button.startAnimation(anim); 
13

To jest animacja, której używaliśmy w naszym projekcie. Spinner to widok, więc możesz to zmienić za pomocą swojego obrazu. Tak naprawdę dwa obrazy na wierzchu, jeden widoczny niewidoczny. Tak to zrobiliśmy. Mam nadzieję, że to pomoże.

spinner.setVisibility(View.VISIBLE); 
    spinner.setAlpha(0); 

    spinner.animate().setDuration(200).alpha(1).setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      spinner.setVisibility(View.VISIBLE); 
     } 
    }); 

    infoActivityContent.animate().setDuration(200).alpha(0).setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      infoActivityContent.setVisibility(View.GONE); 

     mainPresenter.logout(); 
     } 
    }); 
+0

to też potrzebuje poziomu API 12 i potrzebuję 8. W każdym razie użyję go, dopóki nie znajdę czegoś innego. Jeśli chcę nieskończenie pojawiać się i znikać (co oznacza, że ​​muszę rozpocząć animację od wewnątrz zanikającej animacji), czy w końcu spowoduje to przepełnienie pamięci? – DominicM

+1

Nie, to normalnie nie powinno być problemu. Wszystkie są uruchomione na różnych wątkach i gdy pierwszy z nich zakończy całą przydzieloną pamięć, zostanie uwolniony. –

-1

Implementacja klasy animacji (można ją załadować za pomocą XML lub utworzyć dynamicznie).

Następnie można ustawić za pomocą API setAnimation (Animation animation).

0

Można zrobić kilka kolejnych klatek swojego pierwszego obrazu morfingu do swojego drugiego obrazu i z powrotem, a następnie określić je jako animation-list i uruchomić animację w onCreate

button_frames.xml:

<?xml version="1.0" encoding="utf-8"?> 
     <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:drawable="@drawable/frame1" android:duration="100" /> 
     <item android:drawable="@drawable/frame2" android:duration="100" /> 
        .... 

układ:

<ImageView android:id="@+id/button" 
     android:background="@drawable/button_frames"/> 

OnCreate:

ImageView button= (ImageView)findViewById(R.id.button); 
    mAnimation = (AnimationDrawable) animationView.getBackground(); 
    button.postDelayed(new Runnable() { 
     public void run() { 
     mAnimation.start(); 
     } 
    }, 100); 
4

Musisz przeczytać Crossfading Two Views z Android developers. W tym samouczku wyjaśniono, jak robić to, co chcesz.

+1

to wygląda bardzo dobrze, ale wymaga poziomu 12 interfejsu API i potrzebuję poziomu 8 (zapomniałem wspomnieć o ...) – DominicM

Powiązane problemy