Некоторое время назад, около API 17 или 21, я добавил растровое изображение ('emptyBmap') в мой метод Android onDraw () в надежде использовать его в приложении, но никогда не делал этого, поэтому приложение только dr aws через Canvas like - canvas.drawline (), et c. Затем я прочитал, что растровые изображения истощают память кучи, и решил (на API 29) удалить строку выделения из кода в приведенном ниже стеке вызовов onDraw:
Bitmap emptyBmap = null;
protected void onDraw(Canvas canvas) {
int horz, vert;
vert = VERT;
horz = HORZ;
...
if(emptyBmap==null||
(topHalfScreen&&!screenResized)||
(!topHalfScreen&&screenResized)) setImageView( horz, vert);
setView(horz, vert);
setDrawingArea(horz, vert);
...
}
public void setImageView( int horz, int vert) {
frameSize[HORZ] = getWidth()*picFrameSizeMargined;
if(topHalfScreen&&!screenResized){
frameSize[VERT] = getHeight()*halfHeight;
screenResized = !screenResized;
resizeScreen();
}
else {
frameSize[VERT] = getHeight();
screenResized = false;
resetScreen();
}
emptyBmap = Bitmap.createBitmap( (int)frameSize[HORZ]*2,
(int)frameSize[VERT]*2, Bitmap.Config.ARGB_8888 ); // <<= The Allocation in Question
paint = new Paint();
paint.setColor(FOREGROUND);
setView( horz, vert);
}
void setView(int horz, int vert){
orientedFrameSize[LANDSCAPE][vert] = orientedFrameSize[PORTRAIT][horz] = frameSize[HORZ];
orientedFrameSize[LANDSCAPE][horz] = orientedFrameSize[PORTRAIT][vert] = frameSize[VERT];
picturePosition[horz] = frameSize[horz]*picNearMarginFraction; // Left of frame
picturePosition[vert] = frameSize[vert]*sixteenthMargin; // Top of frame
if(picturePosition[vert]<fontSize) picturePosition[vert] = fontSize;
orientedPicturePosition[PORTRAIT][horz] = picturePosition[horz];
orientedPicturePosition[PORTRAIT][vert] = picturePosition[vert];
orientedPicturePosition[LANDSCAPE][horz] = picturePosition[horz];
orientedPicturePosition[LANDSCAPE][vert] = picturePosition[vert];
}
Небольшое объяснение оправдано: Вокруг однократное (emptyBmap == нулевое условие) распределение растрового изображения Я закончил, вызывая метод setImageView () (|| это || эти условия), чтобы ограничить график до верхней половины экрана, чтобы растровое изображение было вызвано, даже если оно не было значение NULL. Теперь проблема заключается в том, что если я удаляю выделение, то получаю два наложенных графика в resizeScreen (), один на верхней половине экрана, как и предполагалось, но другой не изменяется, все еще на полном экране и активно перерисовывается, как будто есть растровое изображение где-то освежает. Является ли это, на первый взгляд, пассивное растровое изображение дублирующим то, что я делаю на Canvas?
Нет явных вызовов Bitmap.drawline () или любого другого.
Это единственный пример.
В другом аналогичном графическом приложении, где я пытался также очистить то же самое, казалось бы, пассивное распределение растровых изображений, удаление линии выделения растровых изображений привело к тому, что ее рисунок полностью исчез (есть небольшие отличия от приведенного выше кода в его логике стека вызовов c хотя).
Может кто-нибудь объяснить это, потому что, похоже, мне нужно сохранить это, казалось бы, пассивное распределение битовых карт?