Определение точного размера глаз
В моем приложении «Картон» для Android я хочу отображать наложение в каждом центре глаза. Простое создание LinearLayout с двумя центрированными видами довольно просто и работает для большинства телефонов, так как глаза лучше всего подходят:
Когда это не так, проблема в том, чтобы получить что-то в каждом глазу. Это наиболее четко показано при использовании планшета:
Я пытаюсь сделать так, чтобы сообщение «Буферизация, 0% ...» было сосредоточено внутри каждого взгляда.
Размер блоков визуализации для глаз имеет фиксированный размер (конечно, потому что расстояние между человеческими глазами имеет довольно фиксированный размер). К сожалению, CardboardView не предоставляет информацию о точном размере и / или положении глаз.
Я смотрел на получение левого и правого глаза черезcardboardView.getCurrentEyeParams()
(странно недокументированный), для которого каждый глаз содержитViewport, Похоже, что это дает размер и положение, но его значения не имеют непосредственного отношения к размеру и расположению на экране.
На LG G2 с разрешением экрана 1920 × 1080, Viewports являются:
Viewport left: {
x: 0,
y: 0,
width: 1150,
height: 1177,
}
Viewport right: {
x: 1150,
y: 0,
width: 1150,
height: 1177,
}
На Nexus 9 с разрешением экрана 2048 × 1536 области просмотра:
Viewport left: {
x: 0,
y: 0,
width: 802,
height: 802,
}
Viewport right: {
x: 802,
y: 0,
width: 802,
height: 802,
}
Оба эти размера (если они указаны в пикселях) намного больше, чем фактическое отображаемое изображение, а в случае LG G2 ширина и высота действительно больше, чем размер экрана 1080px.
Глядя на некоторый декомпилированный код Cardboard SDK, кажется, что закрашенный квадрат вокруг глаз рисуется через внутренний класс с именем DistortionMesh, иотображается через несколько сложный код, (Обратите внимание, что некоторая логика отсутствует в декомпиляции, например строки 195 и 199).
Создание области просмотра предполагает, что значения действительно являются пикселями (смещение в метрах, умноженное на пиксели на метр). Возможно, что DistortionMesh илиматрица EyeView применяется к окну просмотра перед рендерингом? В любом случае у меня возникает ощущение, что я смотрю не в нужном месте.
Я также взглянул на получениеScreenParams, поскольку это обеспечивает ширину и высоту, а также. К сожалению, это возвращает полный размер экрана на обоих устройствах, а также не представляется актуальным.
Мой текущий подход - это пользовательская ViewGroup, которая центрирует двух детей через вызовы.child.layout()
используя высоту ScreenParams и половину его ширины.
Как я могу выяснить, насколько большие Глаза нарисованы в StereoRenderer? Могу ли я найти другой способ для центрирования другого взгляда в глазах?