Я подготовил № рисованной анимации. При запуске приложения будет запущена первая анимация. У меня есть две кнопки (следующая и предыдущая) с той же активностью. Когда я нажимаю на следующую кнопку, я получаю исключение, например,
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
Мой код,
Для получения рисованной анимации из рисованной
private void getAnimationForLetters(int mAnim) {
// TODO Auto-generated method stub
String anim = "capital_anim_" + new Integer(mAnim).toString();
final int resID = getApplicationContext().getResources().getIdentifier(
anim, "drawable", "my-package-name");
mImgLetter.clearAnimation();
mImgLetter.setBackgroundResource(resID);
mImgLetter.post(new Runnable() {
public void run() {
loadingAnimation = (AnimationDrawable) mImgLetter
.getBackground();
loadingAnimation.start();
}
});
}
мой следующий код кнопки,
case R.id.btnNext_:
unbindDrawables(findViewById(R.id.imgLetter));
mLetterNum=mLetterNum+1;
getAnimationForLetters(mLetterNum);
мой недопустимый нарисованный код метода,
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
наконец я получил исключение java.lang.OutOfMemoryError: bitmap size exceeds VM budget
Здесь показывается исключение mImgLetter.setBackgroundResource(resID);
Пожалуйста, помогите мне.
Я добавил следующий код для очистки,
loadingAnimation.stop();
for (int i = 0; i < loadingAnimation.getNumberOfFrames(); ++i){
Drawable frame = loadingAnimation.getFrame(i);
if (frame instanceof BitmapDrawable) {
((BitmapDrawable)frame).getBitmap().recycle();
}
frame.setCallback(null);
}
loadingAnimation.setCallback(null);
Работает нормально только для следующего или предыдущего. При первом щелчке мышью на следующей анимации переходите ко второй анимации, во второй раз, если я нажимаю на предыдущую кнопку, появляется исключение, например,
Canvas: trying to use a recycled bitmap android.graphics.Bitmap
пожалуйста, помогите мне.