2017-01-20 5 views
-1

Я не очень опытен в Android-программировании, поэтому у меня возникла проблема, когда я хочу анимировать до arraySize(). Но цикл повторяется только один раз. Фактически мне нужна анимация приложений, где каждое приложение запускается анимированным после случайного времени задержки. Для лучшего понимания я здесь Проводка моего подробного кода. Я принимаю эту проблему за 2 дня и не могу найти решение, поэтому я решил разместить здесь.Для Loop is Iterating Once, когда значение i = lastSize

@Override 
      public void onAnimationEnd(Animation animation) { 


       Animation cout = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.optimization); 
       fan_bg.setAnimation(cout); 
       animateprogress(mHoloCircularProgressBar);//b8=b7+1; 

       int remainder = ramOptimizeArrayList.size()/8; 

       int b = 0; 
       for (int i=0;i<= remainder;i++) { 

        b = b + 1; 
        top.setImageDrawable(ramOptimizeArrayList.get(b).getIconlink2()); 
        b = b + 1; 
        top_left.setImageDrawable(ramOptimizeArrayList.get(b).getIconlink2()); 
        b = b + 1; 
        top_right.setImageDrawable(ramOptimizeArrayList.get(b).getIconlink2()); 
        b = b + 1; 
        left.setImageDrawable(ramOptimizeArrayList.get(b).getIconlink2()); 
        b = b + 1; 
        right.setImageDrawable(ramOptimizeArrayList.get(b).getIconlink2()); 
        b = b + 1; 
        bottom.setImageDrawable(ramOptimizeArrayList.get(b).getIconlink2()); 
        b = b + 1; 
        bottom_left.setImageDrawable(ramOptimizeArrayList.get(b).getIconlink2()); 
        b = b + 1; 
        bottom_right.setImageDrawable(ramOptimizeArrayList.get(b).getIconlink2()); 

        Runnable runnable = new Runnable() { 
         @Override 
         public void run() { 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            top_right.startAnimation(top_left_anim); 
           } 
          }); 

         } 
        }; 

        Handler handler1 = new Handler(); 
        handler1.postDelayed(runnable, 100); 

        Runnable runnable2 = new Runnable() { 
         @Override 
         public void run() { 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            top.startAnimation(top_anim); 
           } 
          }); 

         } 
        }; 

        Handler handler3 = new Handler(); 
        handler3.postDelayed(runnable2, 50); 

        Runnable runnable4 = new Runnable() { 
         @Override 
         public void run() { 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            top_left.startAnimation(top_right_anim); 
           } 
          }); 

         } 
        }; 

        Handler handler4 = new Handler(); 
        handler4.postDelayed(runnable4, 200); 


        Runnable runnable5 = new Runnable() { 
         @Override 
         public void run() { 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            left.startAnimation(left_anim); 
           } 
          }); 

         } 
        }; 

        Handler handler5 = new Handler(); 
        handler5.postDelayed(runnable5, 500); 


        Runnable runnable6 = new Runnable() { 
         @Override 
         public void run() { 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            right.startAnimation(right_anim); 
           } 
          }); 

         } 
        }; 

        Handler handler6 = new Handler(); 
        handler6.postDelayed(runnable6, 300); 

        Runnable runnable7 = new Runnable() { 
         @Override 
         public void run() { 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            bottom_left.startAnimation(bottom_left_anim); 
           } 
          }); 

         } 
        }; 

        Handler handler7 = new Handler(); 
        handler7.postDelayed(runnable7, 600); 

        Runnable runnable8 = new Runnable() { 
         @Override 
         public void run() { 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            bottom.startAnimation(bottom_anim); 
           } 
          }); 

         } 
        }; 

        Handler handler8 = new Handler(); 
        handler8.postDelayed(runnable8, 350); 

        Runnable runnable9 = new Runnable() { 
         @Override 
         public void run() { 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            bottom_right.startAnimation(bottom_right_anim); 
           } 
          }); 

         } 
        }; 

        Handler handler9 = new Handler(); 
        handler9.postDelayed(runnable9, 650); 
       } 
      /*top.startAnimation(top_anim); 
      top_left.startAnimation(top_right_anim); 
      left.startAnimation(left_anim); 
      right.startAnimation(right_anim); 
      bottom_left.startAnimation(bottom_left_anim); 
      bottom.startAnimation(bottom_anim); 
      bottom_right.startAnimation(bottom_right_anim);*/ 
       } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 

      } 
     }); 
+0

Почему все 'B = B + 1' линии? Похоже, это должен быть цикл. –

+0

Аналогично, каждое имя переменной, которое заканчивается номером, указывает, что вы должны использовать структуру цикла. –

+0

Не обижайтесь, но вам нужен серьезный рефакторинг кода :) – shadygoneinsane

ответ

0

Если вы хотите iterate до array size, почему вы используете остаток в loop. Вы установили значение остатка на:

int remainder = ramOptimizeArrayList.size()/8; 

Поскольку remainder является INT, если array size это сказать 13: remainder = 13/8, который, оказывается, 1, так как remainder является integer.

Написать свой цикл, как:

for (int i=0;i<= ramOptimizeArrayList.size();i++) { 
//rest of your code 
} 
+0

На самом деле, я хочу, чтобы анимация на каждом изображении и анимации имела некоторую задержку из-за того, что я думаю, что этот цикл повторяется один раз .... –