Предотвращение масштабирования растрового изображения, созданного во время выполнения для ImageView - Android - PullRequest
0 голосов
/ 23 сентября 2010

У меня есть ImageView, выступающий в качестве верхнего баннера поверх веб-просмотра. Изображение этого баннера создается во время выполнения в зависимости от разрешения устройства. Высота баннера всегда одинакова для каждого разрешения. Единственное, что меняется, это ширина, которая меняется в зависимости от ориентации. Но, поскольку ширина меняется, а высота не меняется, я получаю 2 изображения с разной пропорцией. И таким образом, масштабирование вниз / вверх не сработает для меня.

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

Я думал о том, чтобы получить действительно большое изображение, которое подойдет как для альбомной, так и для портретной ориентации. Но, похоже, это не очень хорошая идея, поскольку Android постоянно изменяет размер изображения, поэтому оно умещается в пространстве ImageView.

У меня заканчиваются идеи здесь. Может кто-нибудь что-то предложить?

Спасибо, Рафаэль Рамос

1 Ответ

2 голосов
/ 23 сентября 2010

Какой тип изображения вы используете для этого заголовка?Использование изображения с фиксированным размером пикселя - плохая идея, просто из-за того, сколько разрешений вам придется иметь дело.Вы должны рассмотреть использование изображения с 9 участками, если это возможно для типа фона, который вы пытаетесь использовать.Затем просто установите layout_width на fill_parent, и он автоматически изменит его размер по мере необходимости.

http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

РЕДАКТИРОВАТЬ: Трудно точно сказать, что у вас есть, но я бы предложил что-то вродениже вместо ImageView:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="{whatever height you have set}"
    android:id="@+id/header_relative_layout"
    android:background="@drawable/gradient"
    >
    <ImageView
        android:id="@+id/header_imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:layout_alignParentLeft="true"
        android:src="@drawable/header_image"
        />
    <TextView
        android:id="@+id/header_textview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/header_text"
        android:layout_toRightOf="@id/header_imageview"
        android:layout_marginLeft="10dp"
        />
</RelativeLayout>

Gradient.xml (поместите в папку Drawables)

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"
    >
    <gradient 
        android:startColor="#FFFF0000" 
        android:endColor="#80FF00FF"
        android:angle="270"
        />
</shape>

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

Помогает ли это?

...