Определение точного размера глаз

В моем приложении «Картон» для 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? Могу ли я найти другой способ для центрирования другого взгляда в глазах?

Ответы на вопрос(0)

Ваш ответ на вопрос