Я создаю приложение, которое загружает шесть растровых изображений в качестве фона кнопки, чтобы изменить состояние кнопки, когда пользователь выполняет какие-либо действия над этим, но иногда оно дает ошибку, например
java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины
И я использую следующий метод в MainActivity для установки растрового изображения:
on_duty.setBackgroundDrawable(GetApplicationDrawable
.Button3(R.drawable.on_duty_d));
off_duty.setBackgroundDrawable(GetApplicationDrawable
.Button3(R.drawable.off_duty));
journey_start.setBackgroundDrawable(GetApplicationDrawable
.Button3(R.drawable.journey));
journey_end.setBackgroundDrawable(GetApplicationDrawable
.Button3(R.drawable.destination_d));
metting_in.setBackgroundDrawable(GetApplicationDrawable
.Button3(R.drawable.meeting));
metting_out.setBackgroundDrawable(GetApplicationDrawable
.Button3(R.drawable.over_d));
И мой метод Button3 внутри моего класса GetApplicationDrawable, как показано ниже, для декодирования растровых изображений
public static Drawable Button3(int res_id) {
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeResource(context.getResources(),
res_id);
} catch (Exception e) {
e.printStackTrace();
}
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float newWidth = (float) ((float) wt / 3);
float scaleWidth = ((float) newWidth) / width;
float newHeight = (float) ((float) wt / 4);
float scaleHeight = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap mannagedBitmap = bitmapMannagement(context.getResources(),
res_id, width, height);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(mannagedBitmap,
(int) newWidth, (int) newHeight, true);
Drawable d = new BitmapDrawable(context.getResources(), resizedBitmap);
return d;
}
Спасибо.