2013-03-04 3 views
5

У меня есть пользовательский ImageView, который охватывает весь экран. Изображение получено из одной из доступных папок, drawable-hdpi, drawable-xhdpi, drawable-sw600dp и т. Д., И для каждого контейнера плотности есть отдельные изображения.Пользовательский ImageView автоматически изменяется на Nexus 7

Пока что приложение отлично работает на устройствах xhdpi и hdpi, проблема возникает, когда я тестирую его на Nexus 7. Изображение, хранящееся в папке sw600dp, имеет размер 1600x1600 и должно быть достаточным для прямого рисования на экран (без масштабирования), однако, когда я запустить приложение, экран оказывается совершенно пустым, и я получаю следующее предупреждение:

03-04 16: 25: 46.338: W/OpenGLRenderer (25457): Растровые слишком большой, чтобы быть загружены в текстуру (2130x2130, макс = 2048x2048)

по некоторым причинам т его растровое изображение 1600x1600 масштабируется до 2130x2130, хотя я не вручную его масштабировал в любом месте (не было применено ни одна матрица, не примененная к шкале или scaleX/scaleY)

Любые мысли о том, почему это может происходить? Пожалуйста, предоставьте решение и объясните, почему это может произойти.

ответ

7

Поскольку Nexus 7 является tvdpi, он масштабирует каждое изображение до 1,33 от исходного значения. Таким образом, 1600 становится (1600 * 1.33) = ~ 2130. Он не отобразит его из папки sw600dp.

Дополнительной информация: - http://developer.android.com/guide/practices/screens_support.html

Вы можете использовать один и тот же образ, который вы используете для любого другого 7-дюймового планшета (т.е. разрешения 1024 * 600).

+0

Спасибо Kunal, это был потрясающий ответ, я действительно поместил изображение в каталог drawable-tvdpi, и он отлично работал. Большое спасибо. Урок: рисунки drawable-sw600dp масштабируются при отображении на узле 7, а drawable-tvdpi - нет. – Soham

0

Я хочу поделиться некоторой информацией об ошибке вы получаете ..

Согласно Romain Guy(Android инженер-рамочном):

При использовании аппаратного ускорения, существует предел до размера текстуры . Когда вы визуализируете растровое изображение, оно сначала должно быть загружено в структуру OpenGL . Ваше растровое изображение оказывается больше максимального размера текстуры на Xoom (2048x2048.) Вам нужно использовать меньшую растровую карту или , чтобы разбить ее на несколько растровых изображений.

Другие SO ссылки могут быть полезными для Вас: click here1, click here2

Гит: click here

Update: Этот ответ говорит только, почему происходит ошибка (becauseof текстуры предельного размера) жаль, что это не полный ответ за то, почему растровое изображение 1600x1600 масштабируется до 2130x2130!

+0

Я знал о пределе, вопрос в том, почему изображение 1600x1600 получает масштабирование до чего-то выше 2048x2048 – Soham

Смежные вопросы