как масштабировать изображение на весь экран

Моя проблема заключается в следующем: я использую эмулятор Android, ориентированный на Android 2.2. Я создал настраиваемое представление, в котором я хочу обрабатывать фон моего приложения, в этом представлении я хочу отображать только изображение, но я хочу, чтобы оно заполняло весь экран.

Я инициализирую представление из своей «Активности» следующим образом: BackgroundView bw = new BackgroundView(this);

Проблема: на моем жестком диске изображение ресурса, которое я использую, имеет размер 500x375 пикселей. После вызова:

Растровое изображение m_resourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.landscape_1); int nWidth = m_resourceBitmap.getWidth(); int nHeight = m_resourceBitmap.getHeight();

возвращаемые nWidth и nHeight зависят от того, где я разместил ресурс, если я поместил его в «drawable-mdpi», я получаю исходный размер, в противном случае я получаю другие размеры.

С другой стороны, если я запрашиваю представление о его ширине и высоте через this.getWidth(); это.getHeight();

Я получаю фиксированные значения, но отличающиеся от разрешения, которое я ожидал от устройства (я устанавливаю устройство 480x800 и получаю 320x533)

и, наконец, если я попытаюсь создать масштабную матрицу, используя размеры вида, разделенные на размеры изображения, результатом на экране будет изображение, намного меньшее, чем экран...

У меня такой вопрос: Какие вопросы мне задавать и из каких объектов, чтобы внутри View я мог нарисовать ресурс Bitmap, чтобы он занимал весь экран?


person mihaido    schedule 14.11.2010    source источник
comment
Это может помочь вам, если вы пометите это как «Android».   -  person Bill Cheatham    schedule 14.11.2010


Ответы (1)


Разве вы не можете сделать все это в XML-файле макета? (Вот пример, который я использую для фонового изображения моего меню)

<ImageView android:id="@+id/menuBackground"
        android:src="@drawable/imageResource"
        android:adjustViewBounds="true"
        android:gravity="center_vertical"
        android:scaleType="fitXY"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_x="0dp" 
        android:layout_y="0dp" />

Затем, если вам нужно изменить его во время выполнения, все, что вам нужно сделать, это изменить рисунок.

person SlowSeer    schedule 14.11.2010
comment
Однако я бы не стал использовать fitXY, если только это не просто градиент или что-то, где соотношение сторон не имеет значения (даже тогда я, вероятно, не стал бы этого делать). Используйте centerCrop, если вы хотите, чтобы он масштабировался пропорционально, чтобы заполнить экран. - person Kevin Coppock; 15.11.2010
comment
Хороший совет! Я не знал об этом. - person SlowSeer; 15.11.2010