Подтвердить что ты не робот

Как я могу повторить переход навсегда?

У меня есть переход, похожий на этот:

<?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>

и Code выглядят следующим образом:

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

Моя проблема в том, что я не знаю, как повторить этот переход навсегда, поэтому я могу создать пульсирующий эффект.

Edit:

Чтобы все было ясно: код запускается при создании представления (listitem), поэтому петли не являются решением.

4b9b3361

Ответ 2

Я знаю, что этот вопрос старый, но я хотел бы помочь другим пользователям с другим возможным решением.

AnimationDrawable - это правильный способ, когда у вас более двух изображений, но если у вас есть только два изображения, вы можете использовать TransitionDrawable, как вы сказали. Я покажу вам, как это сделать.

В первый раз я использую таймер в своем onCreate().

    Timer MyTimerImage = new Timer();

Затем я создам класс MyTimerTask для запуска моего собственного кода.

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

            }});
    }

}

И, наконец, я создам переменную MyTimerTask для запуска моего таймера. Этот код идет ниже создания таймера().

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

В этом случае метод расписания имеет 3 параметра: первый указывает на нашу задачу TimerTask, вторая - это задержка для запуска TimerTask в мс, а третья - каждый период, который мы хотим запустить.

Не забудьте указать файл TransitionFile.xml в android:background.

Я надеюсь, что это может помочь кому-то.

Ответ 3

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

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

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

Ответ 4

  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
          }
      }

Это может работать или не работать должным образом. Я говорю, что, поскольку во время перехода на 2 секунды цикл while будет продолжать цикл, startTransition снова будет вызван, и снова, и снова, и снова. Вы можете использовать условие condiitonal для проверки текущего времени и проверить, не прошло ли последнее время меньше 2000.

Это может быть не самое лучшее, но цикл while - это хорошее место для начала.

Если вам нужно, я могу попытаться дать лучший пример кода, который будет лучше управлять циклом while, но сначала вы должны попробовать.