У меня есть игра с полным экраном SurfaceView (Портрет) и нитью, которая непрерывно рендерится на поверхности.
SurfaceView инициализируется onCreate
, а его размер определяется шириной и высотой экрана в пикселях.
После того, как он создан, он устанавливается как представление содержимого игровой активности (без определений XML):
Bitmap frameBuffer = Bitmap.createBitmap(screenWidth, screenHeight, Config.ARGB_8888);
MySurfaceView renderView = new MySurfaceView(this, frameBuffer);
this.setContentView(renderView);
Проблема в том, что высота экрана не включает в себя вырезы дисплея (для устройств, у которых они есть) и выше, чем разрешенный экран рисования, поскольку renderView расположен ниже области выреза и не использует его для рендеринга.
Я пытаюсь найти реальное screen height - display cutout height
, чтобы я мог сделать буфер кадра такой высоты.
Знаете ли вы, есть ли способ получить высоту области выреза дисплея onCreate
, точно так же, как мы можем получить высоту навигации / строки состояния. Ниже приведен фрагмент, который возвращает высоту панели навигации:
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
int navigationBarHeight = resources.getDimensionPixelSize(resourceId);
}
Спасибо за помощь!
--- ОБНОВЛЕНИЕ ---
Я постараюсь прояснить вопрос подробнее:
1) onCreate
полноэкранный портрет SurfaceView создается с размерами ширины и высоты экрана (без XML)
2) Режим погружения включен для уровня API> 19 (KitKat)
3) Ширина и высота экрана берется с помощью Display.getSize () или Display.getRealSize () в зависимости от уровня API
4) На устройствах с верхним вырезом дисплея вид автоматически размещается под вырезом, а нижнее содержимое вырезается, , и это проблема
5) Я хотел бы получить высоту выреза дисплея onCreate
, чтобы я мог создать высоту SurfaceView равной screenHeight - displayCutoutHeight
.
6) Проблема сводится к поиску высоты выреза дисплея.