2011-12-20 11 views
12

mam przejście wygląda tak:Jak mogę powtórzyć przejście na zawsze?

<?xml version="1.0" encoding="UTF-8"?> 
<transition xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:drawable="@drawable/divider"/> 
    <item android:drawable="@drawable/divider_active"/> 

</transition> 

i kod wygląda tak:

View divider = v.findViewById(R.id.divider); 
if (divider != null) { 
    TransitionDrawable transition = (TransitionDrawable) divider.getBackground(); 
    transition.startTransition(2000); 
} 

Mój problem jest, nie wiem, jak powtórzyć to przejście na zawsze, więc mogę utworzyć efekt pulsujący.

Edit:

Żeby było jasne: kod pobiera wykonywane podczas tworzenia widoku (listitem), więc pętle nie są rozwiązaniem.

Odpowiedz

-2
View divider = v.findViewById(R.id.divider); 
    boolean loop = true; 
     while (loop) { 
      TransitionDrawable transition = (TransitionDrawable) divider.getBackground(); 
      transition.resetTransition(); //I don't really know if this is necessary 
      transition.startTransition(2000); 
      //you'll want to stop SOME time. 
      if (wantToStop){ 
       loop = false 
      } 
     } 

To może ale nie musi działać poprawnie. Mówię tak, ponieważ podczas przejścia 2-sekundowego pętla while będzie nadal pętla, startTransition zostanie wywołana ponownie, i znowu, i znowu, i znowu. Możesz użyć warunkowego wyciągu, aby sprawdzić aktualny czas i sprawdzić, czy ostatni rozpoczęty czas jest krótszy niż 2000.

To może nie być najlepsza, ale pętla jest dobrym miejscem do rozpoczęcia.

Jeśli potrzebujesz, mógłbym spróbować podać lepszy przykład kodu, który lepiej sobie poradzi z pętlą while, ale powinieneś spróbować najpierw.

+0

Zapętlanie nie działa, ponieważ blokuje. Ten dzielnik jest częścią listy w widoku listy. Wykonuję ten kod podczas tworzenia widoku. – CPlusPlus

+0

Spróbuj użyć wątku? Może to być nieco skomplikowane, ponieważ nie można zaktualizować wątku interfejsu użytkownika z wątku roboczego, ale może być to wykonalne. Będziesz musiał użyć Handler również do komunikacji.Chyba naprawdę nie wiem, gdzie możesz iść dalej. – Jakar

+0

Myślę, że to naprawdę skomplikowane. Myślałem o animacjach, ale nie znalazłem w internecie nic podobnego:/ – CPlusPlus

4

Wiem, że to pytanie jest stary, ale chciałbym, aby pomóc innym użytkownikom innego możliwego rozwiązania.

AnimationDrawable to poprawny sposób, gdy masz więcej niż 2 obrazy, ale jeśli masz tylko dwa obrazy, możesz użyć również TransitionDrawable, jak powiedziałeś. Pokażę ci, jak to zrobić.

Za pierwszym razem użyję timera w moim onCreate().

Timer MyTimerImage = new Timer(); 

Następnie utworzę klasę MyTimerTask, aby uruchomić własny kod.

public class MyTimerTask extends TimerTask { 
    LinearLayout myIDLinearLayout= (LinearLayout) findViewById(R.id.myIDofLinearLayout); 

    TransitionDrawable MyTrans = (TransitionDrawable) myIDLinearLayout.getBackground(); 

    int i = 0; 
    @Override 
    public void run() { 
     runOnUiThread(new Runnable(){ 

      @Override 
      public void run() { 
       i++; 
       if (i%2==0) { // 
        MyTrans.startTransition(myTransitionTimeinms); 
       }else{ 
        MyTrans.reserveTransition(myTransitionTimeinms); 
       } 

      }}); 
    } 

} 

Na koniec utworzę zmienną MyTimerTask, aby uruchomić timer. Ten kod jest poniżej tworzenia Timera().

MyTimerTask MyTimer = new MyTimerTask(); 
    MyTimerImage.schedule(MyTimer, myDelay, myPeriod); 

W tym przypadku metoda harmonogram ma 3 parametry: pierwszy wskazuje nasze zadanie TimerTask, drugi jest opóźnienie uruchomić TimerTask w ms, a trzeci oznacza każdy okres, który chcemy uruchomić kod.

Nie zapomnij dołączyć pliku TransitionFile.xml do swojego android:background.

Mam nadzieję, że może komuś pomóc.

1
public void repeat(){ 
    new CountDownTimer(2000, 1000){ 

     public void onTick(long millisUntilFinished){ 
      transition.startTransition(2000); 
     } 

     public void onFinish() { 
      transition.resetTransition(); 
      repeat(); 
     } 
    }.start(); 
} 
+0

Dodaj trochę kontekstu wokół fragmentu kodu lub może to być trudne dla użytkowników do zrozumienia Twojego podejścia. – RBT

Powiązane problemy