Я считаю, что приложение не объявляет о поддержке экранов с различной плотностью. В 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 и выше.