Проблема в 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
объект и не копирует растровые данные для каждого нового.