Почему ширина / высота отрисовки в ImageView неверны? - PullRequest
7 голосов
/ 30 июня 2011

Должно быть простым.

Когда я вытягиваю image.getDrawable().getIntrinsicWidth(), я получаю значение, превышающее ширину исходного изображения.Его координата X возвращает 2880 вместо 1920, что в 1,5 раза больше?

Интересно, не повлияло ли на ImageView значение scaleType «center», но, согласно документации :

"Центрируйте изображение на виде, , но не масштабируйте. "

Вот источник:

<ImageView  
    android:id="@+id/backgroundImage"   
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:src="@drawable/background"
    android:scaleType="center"/>

Ответы [ 4 ]

22 голосов
/ 08 июля 2011

Вы сказали, что отрисовка из вашей папки /res. В какой папке он находится?

  • /res/drawable
  • /res/drawable-mdpi
  • /res/drawable-hdpi

    и т.д ..

А какова плотность устройства, на котором вы тестируете? Это Nexus S с общей плотностью 240 точек на дюйм? Потому что, если исходный чертеж находится в папке drawable-mdpi, а вы тестируете устройство с разрешением 240 точек на дюйм, то система Android автоматически увеличит масштабирование с коэффициентом 1.5, чтобы физический размер соответствовал базовому уровню. плотность устройства при 160dpi.

Когда вы вызываете getIntrinsicWidth(), возвращается размер, который рисующий хочет, чтобы был после того, как Android масштабирует чертеж. Вы заметите, что 2880 = 1920 * 1.5

Если вы поместили чертеж в /res/drawable, то система Android рассматривает эти чертежи как предназначенные для устройств mdpi, таким образом, масштабирование в вашем Nexus S. Если это было предназначено для экранов hdpi, и вы не хотите, чтобы это масштабировалось, попробуйте разместить это в drawable-hdpi

4 голосов
/ 01 июля 2011

Вы пытались умножить высоту и ширину на плотность:

getResources().getDisplayMetrics().density

Можно ли рисовать в ресурсах или загружать из Интернета?Если он загружен, вы должны указать плотность:

DisplayMetrics metrics = new DisplayMetrics();
getContext().getWindowManager().getDefaultDisplay().getMetrics(metrics);
Resources r = new Resources(getContext().getAssets(), metrics, null);
BitmapDrawable bmd = new BitmapDrawable(r, bitmap);
0 голосов
/ 30 июня 2011

Вероятно, это не будет иметь ничего общего с проблемой, с которой вы столкнулись, но просто для удовольствия, я все равно порекомендую это: вы указываете android:minSdkVersion в своем манифесте?

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

0 голосов
/ 30 июня 2011

Проверьте, возвращает ли оно значение отображаемого размера, а не фактический размер. Например, баннерная реклама размером 50x320 пикселей на традиционном телефоне 800x480 отображается с разрешением 75x480.

Должен уметь сравнивать плотность (или ваши глаза!), Чтобы увидеть, что он делает.

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