2012-06-16 6 views
-1

Я пытаюсь анимировать ImageView, используя Runnable и Handler.postDelayed. Растровые операции работают нормально, но вместо анимации я получаю окончательный результат ImageView. Что здесь не так?Анимация с использованием Runnable?

final ImageView imageView = (ImageView) findViewById(R.id.imageView); 
    final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.clock_flip_top); 
    final Matrix matrix = new Matrix(); 
    for (i = 0; i < 30; i++) { 
     float c = i/5; 

     src = new float[] { 0, 0, bitmap.getWidth(), 0, 
        bitmap.getWidth(), bitmap.getHeight(), 0, 
        bitmap.getHeight() }; 
     dst = new float[] { 0 - c, 0, bitmap.getWidth() + c, 0, 
       bitmap.getWidth(), bitmap.getHeight(), 0, 
       bitmap.getHeight() }; 

     anim = new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 

       matrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1); 
       Bitmap newBitmap = Bitmap 
         .createBitmap(bitmap, 0, 0, bitmap.getWidth(), 
           bitmap.getHeight(), matrix, true); 
       imageView.setImageBitmap(newBitmap); 
       handler.postDelayed(anim, i * 200); 

      } 

     }; 
     anim.run(); 
    } 
+0

Я не понимаю, почему вы внедряете Runnable? Вам нужен отдельный поток для вашей анимации? Если это так, запустите цикл и вызовите его один раз. – roim

+0

Цикл будет слишком быстрым, чтобы анимация отображалась правильно, Runnable позволяет мне повторять преобразование битмапа 'i', чтобы иметь запущенную анимацию. Также это перспективная анимация, для которой я не смог найти обычный метод «Анимация». – Phat7

ответ

0

Вы не звоните run(). Чтобы ваш Runnable-объект выполнялся в другом потоке, вы должны создать объект Thread, передав его объекту Runnable в конструкторе в объект Thread. Затем вы вызываете start() на объект потока. См. here для подробного описания запуска потоков.

+0

Я вызываю 'run()' в конце цикла. – Phat7

+0

Нет, вы никогда не вызываете run(). Метод run() предназначен для использования объектом Thread, и вы запускаете Thread путем вызова метода start(). Прочитайте ссылку, которую я дал в своем ответе о потоках и как их использовать в Java. – Kerry

Смежные вопросы