0

У меня есть ImageView и 16 изображений. Я хочу изменить фоновое изображение в соответствии с этими изображениями. Я использовал Handler, но результат не меняется плавно. Как я могу сделать изменение более гладким? Как вы думаете, AnimationDrawable лучше? Это мой кодПериодически изменяйте изображение в образе и плавный андроид

private static int[] drawable_img_Array = { R.drawable.img01, R.drawable.img02,R.drawable.img03,R.drawable.img04, 
     R.drawable.img05, R.drawable.img06,R.drawable.img07,R.drawable.img08, 
     R.drawable.img09, R.drawable.img10,R.drawable.img11,R.drawable.img12, 
     R.drawable.img13, R.drawable.img14,R.drawable.img15}; 

final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable(){ 
     public void run(){ 
      if(i<drawable_img_Array.length) { 
       imgView.setImageResource(drawable_img_Array[i]); 
       i++; 
      } else { 
       i=0; 
      } 
      handler.postDelayed(this, 100); 
     } 
    }, 100); 

Это мой второй способ использования AnimationDrawable

animation = new AnimationDrawable(); 

    for (int j=0;j<drawable_ring_Array.length;j++) 
    { 
     animation.addFrame(getResources().getDrawable(drawable_img_Array[j]), 100); 

    } 
    animation.setOneShot(false); 
    ImageView imgView = (imgView) findViewById(R.id.img); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(400, 400); 
    params.alignWithParent = true; 
    params.addRule(RelativeLayout.CENTER_IN_PARENT); 

    imgView.setLayoutParams(params); 
    imgView.setImageDrawable(animation); 
    imgView.post(new Starter());   
+0

Вы пробовали 'ImageSwitcher'? Возможно, это будет служить для вашей цели. Взгляните на эти ссылки: [ссылка] (https://developer.android.com/reference/android/widget/ImageSwitcher.html) и [учебник] (http://www.tutorialspoint.com/android/android_imageswitcher.htm) – Joacer

+0

Что значит «результат не меняется гладко»? Есть ли проблема с производительностью или вы просто хотите изменить ресурс представления с помощью анимации? –

+0

Просто хотите изменить ресурс представления с помощью анимации и уменьшить задержку. Задержка делает изменение не гладким. Я думаю, что задержка - это загрузка изображения в цикле – Jame

ответ

0

Используйте ImageSwitcher

<ImageSwitcher 
    android:id="@+id/image_switcher" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:inAnimation="@anim/fade_in_image" 
    android:outAnimation="@anim/fade_out_image"> 
</ImageSwitcher> 

вы можете создавать анимации вы хотите, и использовать их для в/из.

Теперь при звонке imageSwitcher.setImageResource(myNextImage) он будет анимировать переход.

2

В коде есть некоторая логическая ошибка. Это следующие:

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

} else { 
    i=0; 
    imgView.setImageResource(drawable_img_Array[i]); 
    i++; 
} 

Наконец, что может быть реальная проблема запуска кода на UI потоке, как этот

private static int[] drawable_img_Array = {R.drawable.img01, 
      R.drawable.img02, R.drawable.img03, R.drawable.img04, 
      R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08, 
      R.drawable.img09, R.drawable.img10, R.drawable.img11, R.drawable.img12, 
      R.drawable.img13, R.drawable.img14, R.drawable.img15}; 

    final Handler handler = new Handler(); 
    handler.new Runnable() { 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        if (i < drawable_img_Array.length) { 
         imgView.setImageResource(drawable_img_Array[i]); 
         i++; 
        } else { 
         i=0; 
         imgView.setImageResource(drawable_img_Array[i]); 
         i++; 
        } 
        handler.postDelayed(this, 100); 
       } 
      }); 
     } 
    } 
      , 100); 

Надежда это whould работать, если не чем вывесить журнала/ошибка, поэтому мы можем Помогите.