Что определяет начальные размеры холста в представлении? - PullRequest
1 голос
/ 30 апреля 2011

Я работаю с версией 1.6 кода сканера штрих-кода ZXing.

Хотя версия этого приложения из Android Market (3.53) отлично работает на моем Incredible, ViewFinderView выглядит неправильно, когда я сам его компилирую (3.5beta).

Я обнаружил, что размер холста по умолчанию для ViewFinderView (который заполняет весь экран) равен 533x320, а фактические размеры экрана - 800x480.

Таким образом, в методе onDraw ViewFinderView принимает экранные координаты для прямоугольника видоискателя, но применяет их в координатах холста onDraw. Это приводит к тому, что видоискатель отрисовывается слишком далеко и слишком сильно в измерениях x и y.

Так что же определяет фактические размеры холста, которые получает ваш Просмотр? В моем случае холст уменьшен на треть по сравнению с координатами экрана. Я не могу найти никаких различий в коде, которые могли бы повлиять на это между версиями 3.5beta и 3.53.

1 Ответ

3 голосов
/ 30 апреля 2011

Я считаю, что приложение не объявляет о поддержке экранов с различной плотностью. В AndroidManifest.xml есть тег <supports-screens>, в котором есть параметр anyDensity. Если установлено значение true, предполагается, что приложение может обрабатывать экраны с различной плотностью, если установлено значение false, Android масштабирует сам экран, поэтому приложение может рисовать на экране другого размера, чем фактический, в зависимости от экрана. плотность.

По умолчанию для этого параметра установлено значение true, если приложение предназначено для уровня API от 4 и выше, а в противном случае - false. Это сделано потому, что до того, как приложения для Android 1.6 были созданы для фиксированного размера и плотности экрана, а начиная с Android 1.6 это изменилось, поэтому необходимо было поддерживать обратную совместимость.

В вашем случае экран имеет высокую плотность, что соответствует коэффициенту 1,5. Поэтому, если вы рисуете на экран с высотой 800 пикселей, это считается тем же, что и при рисовании на экране размером 533 пикселей с нормальной плотностью.

Если вы хотите, чтобы Canvas имел «реальный» размер, anyDensity необходимо установить на true или, по крайней мере, minSdkVersion на 4 и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...