Проблема в AnimationDrawable андроид студии

У меня есть анимация, которую я хочу, но такая же анимация в двух изображениях. Проблема в том, что первая не работает, а вторая работает.

AnimationDrawable animation1 = new AnimationDrawable();
Bitmap bitmapba1 = BitmapFactory.decodeResource(getResources(),R.drawable.a);
Bitmap bitmapba2 = BitmapFactory.decodeResource(getResources(), R.drawable.b);
bitmapba1=Bitmap.createScaledBitmap(bitmapba1,x,x,false);
bitmapba2=Bitmap.createScaledBitmap(bitmapba2,x,x,false);
animation1.addFrame(new BitmapDrawable(bitmapba1), 20);
animation1.addFrame(new BitmapDrawable(bitmapba2), 20);
myimage1.setImageDrawable(animation1);
myimage2.setImageDrawable(animation1);

Проблема решена, но неэффективно (примитивно). Я объявил вторую animation2 такими же bitmapba1 и bitmapba2: animation2.addFrame (... (bitmapba1), 20) и animation2.addFrame (... (bitmapba2), 20).

Вопрос в том, что делать, если существует 100 изображений, которые они используют в одном анимационном рисовании?

1 ответ

Решение

Как писал Style-7, для каждого экземпляра ImageView Вы должны создать свой собственный экземпляр AnimationDrawable, Проблема в том, что экземпляр AnimationDrawable имеет свое государство. Это состояние "разрывается", как только вы разделяете этот единственный экземпляр между несколькими представлениями.

Но вы не должны сохранять копии растровых изображений для каждой анимации. Загрузите их один раз, а затем просто настройте анимацию.

Bitmap bitmapba1 = BitmapFactory.decodeResource(getResources(),R.drawable.a);
Bitmap bitmapba2 = BitmapFactory.decodeResource(getResources(), R.drawable.b);
bitmapba1=Bitmap.createScaledBitmap(bitmapba1,x,x,false);
bitmapba2=Bitmap.createScaledBitmap(bitmapba2,x,x,false);

for(ImageView view : listOfViews){
    AnimationDrawable animation = new AnimationDrawable();
    animation.addFrame(new BitmapDrawable(bitmapba1), 20);
    animation.addFrame(new BitmapDrawable(bitmapba2), 20);
    view.setImageDrawable(animation);
}

Мы также должны создать новый экземпляр BitmapDrawable для каждого экземпляра анимации, поскольку он также имеет свое собственное состояние. Но каждый такой новый экземпляр просто сохраняет ссылку на Bitmap объект и не копирует растровые данные для каждого нового.

Другие вопросы по тегам