Эмуляторы Android не имитируют правильную плотность или разрешение.Возможно проблема реализации SurfaceView - PullRequest
1 голос
/ 28 октября 2010

Я создаю небольшое приложение, которое использует класс surfaceview, который расширяет surfaceholder.callback.Он реализован так же, как пример с лунарлендером.Моя проблема в том, что каждый тип эмулятора, который я использую (низкая, средняя или высокая плотность), на самом деле, похоже, не меняет плотность экрана или разрешение в соответствии с тем, что я ожидал.Я недавно задал этот вопрос о переполнении стека, и меня осенило, что я не делаю ничего плохого с этой функцией, проблема в том, что все используемые мной эмуляторы все-таки распознаются со средней плотностью.

Экран эмулятора высокой плотности показывает очень пикселированные изображения.Изображения эмулятора средней плотности выглядят фантастически.Изображения эмулятора низкой плотности выглядят пиксельно, но не так плохо, как hdpi.

Я сделал mySurfaceHolder.getSurfaceFrame () для каждого эмулятора и придумал:480x800 - hdpi - создает поверхность 320 x 508

По умолчанию (HVGA) - mdpi - создает поверхность 320 x 455 QVGA - 240x320 - ldpi - создает поверхность 320 x 402

Разве эти поверхности не должны быть 480x800, 320x480 и 240x320 соответственно?Изменить: 320x455 имеет смысл, остальное, вероятно, занято в строке заголовка.Но как насчет низкого / высокого?

Итак, я не уверен, что моя проблема:

  1. Как я настраиваю эмулятор.- Я использую HVGA, QVGA, WVGA800 и WVGA854 со стандартными настройками (без пользовательских разрешений)

  2. Что-то не так с моим кодом в классе SurfaceView.Обратите внимание, что я не устанавливаю размер вручную, я полагаюсь на размер, возвращаемый этим методом обратного вызова:

.

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    thread.setSurfaceSize(width, height);
}

Есть мысли?Как всегда, я ценю вашу помощь!

Ответы [ 2 ]

1 голос
/ 28 октября 2010

Ну, мел это до ошибки в документации Android, я думаю.

Проблема в основном в любом используемом мной эмуляторе, имитируемом как экран средней плотности, если только следующая строка не находится в файле манифеста Android. Все ресурсы по умолчанию находятся в папке mdpi и никогда не извлекаются из папки hpdi. Затем автоматически выполнялась какая-то операция масштабирования, поскольку она рассматривала экран HDPI как экран MDPI, объясняя, таким образом, «пиксельные» экранные изображения.

  <supports-screens
        android:anyDensity="true"/>

В документации указано:

«андроид: anyDensity Указывает, может ли приложение соответствовать любой плотности экрана. Предполагается, что более старые приложения (до API уровня 4) не в состоянии вместить все плотности, и по умолчанию это «ложь». Предполагается, что приложения, использующие API уровня 4 или выше, могут работать по умолчанию. Вы можете явно указать свои способности здесь. «

Я использую API Level 8, и мне пришлось предоставить эту строку для имитации экрана при настройке высокой плотности.

0 голосов
/ 28 октября 2010

Поверхность не показывает рабочую зону?Исключая строку состояния и, возможно, строку заголовка приложения.Это может дать вам провалы вместо пикселей.

пикселей = провалы * (плотность / 160)

...