Каков наилучший способ получить фоновое изображение, чтобы оно не искажалось/не растягивалось на разных экранах?

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

Как лучше всего разместить это изображение, чтобы оно не стало «раздавленным» (в форме яйца) при различных размерах экрана? Мое приложение будет работать только в портретном режиме.

Это то, чего я пытаюсь достичь:

введите здесь описание изображения

До сих пор я помещал свое круглое изображение на 3 белых прямоугольных холста для экранов популярных размеров 480x854, 320x480 и 240x320, что, кажется, работает, но я не думаю, что оно очень прочное.

Какие-нибудь советы?


person Jimmy    schedule 16.04.2011    source источник


Ответы (2)


Это, вероятно, не идеальное решение и потребует небольшого обслуживания пользовательского интерфейса, но вот моя мысль:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginRight="-15dp"
        android:layout_marginBottom="-15dp"
        android:src="@drawable/circle"
        />
    <!--Rest of Layout goes here-->
</FrameLayout>

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

РЕДАКТИРОВАТЬ: Да, вам также не нужно беспокоиться о белом прямоугольнике. Просто добавьте тег android:background в FrameLayout с любым цветом фона и сохраните логотип как прозрачный PNG.

person Kevin Coppock    schedule 16.04.2011
comment
Спасибо, ваше решение работает для меня, кроме использования layout_width дважды;) - person Jimmy; 17.04.2011

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

Таким образом, изображение становится настолько большим, насколько это возможно, сохраняя правильные размеры.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:scaleType="centerInside"
        android:src="@drawable/splash_picture"/>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal">
        <!-- rest of your layout -->
    </LinearLayout>
</RelativeLayout>
person Mats Hofman    schedule 16.04.2011