OOM с Bitmaps создает интерактивную карту в андроид студии - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть 4 изображения, которые показывают различные планировки этажей здания, показывая, где находится каждая комната.Есть также 4 соответствующих невидимых изображения цветов (горячих точек), которые при касании возвращают пиксельный цвет, основываясь на этом руководстве.Кроме того, 4 других ImageViews показывают наложение, которое показывает одну комнату (изображение имеет те же размеры, что и остальные, но остальная часть изображения прозрачна).Для него задается различная прорисовка в зависимости от цвета прикосновения, т. Е. Каждый цвет представляет комнату и при нажатии должен выделять комнату.

Изображения находятся в пейджере просмотра, поэтому каждая страница надувает макет с помощью трех изображений (ViewImage, floorImage,hotspotImage, overlayImage)

Я получаю ошибки «Недостаточно памяти», когда я щелкнул по нескольким различным комнатам E / dalvikvm-heap: Недостаточно памяти на выделении 2587740 байт.Я использую Glide, чтобы установить невидимое изображение из пейджера представления в положение:

Glide.with(ctx)
            .asBitmap()
            .load(hotspot_resources[position])
            .into(hotspotView);

Я использую тот же код для других изображений (но без .asBitmap ()).Затем я получаю растровое изображение и использую его для получения координат пикселей:

Matrix inverse = new Matrix();
hotspotImage.getImageMatrix().invert(inverse);
float[] touchPoint = new float[] {x, y};
inverse.mapPoints(touchPoint);
int xCoord = (int)touchPoint[0];
int yCoord = (int)touchPoint[1];
Bitmap hotspots = ((BitmapDrawable)hotspotImage.getDrawable()).getBitmap();
return hotspots.getPixel(xCoord, yCoord);

Что вызывает ошибку OOM, метод использования растрового изображения или других Drawables, часто загружаемых в тот же ImageView?

...