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

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

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

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

enter image description here

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

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

Ответы [ 2 ]

1 голос
/ 17 апреля 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>
1 голос
/ 17 апреля 2011

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

<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>

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

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

...