it-roy-ru.com

Как растянуть / масштабировать фоновые изображения в линейном макете Android?

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

Вот что я получил в тестовом xml на данный момент:

<LinearLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/title"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="@drawable/background">
</LinearLayout>

Который выглядит так в превью (и в игре):

enter image description here

Если я изменю layout_height на fill_parent, я получу повторяющийся фон:

enter image description here Я уверен, что решение очень простое, но по какой-то причине мне его не хватает. Любая помощь будет оценена

спасибо

6
Android Developer

Не уверен, какие доступные параметры макета фона доступны для атрибута фона макета, но вы всегда можете просто поместить ImageView в качестве первого элемента во внешнем FrameLayout с максимальной шириной и высотой. Тогда все, что вы добавите в макет, будет нарисовано поверх этого изображения. И, конечно, вы можете просто загрузить желаемый тип шкалы; например fitXY, возможно, для того, что вы пытаетесь достичь.

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >

<ImageView 
    Android:id="@+id/background"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:contentDescription="@string/backgroundDescription"
    Android:scaleType="centerCrop">
</ImageView>   
...
6
Jay Snayder

здесь важен параметр Android:scaleType с одним из возможных значений:

  • матрица
  • fitXY
  • fitStart
  • fitCenter
  • fitEnd
  • центр
  • centerCrop
  • centerInside

если вы не возражаете против обрезки изображения, когда это необходимо (экран с другим соотношением, чем у вашего изображения), и вы не хотите, чтобы изображение искажалось, я бы порекомендовал centerCrop. если важно, чтобы изображение не было обрезано и вы не заметили, если оно перекошено, то fitXY сделает эту работу.

Надеюсь, что это помогло и прояснило немного ...

4
Ewoks

Вы можете использовать scaleType с centerCrop

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >

<ImageView
    Android:id="@+id/imageView1"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:scaleType="centerCrop"
    Android:src="@drawable/background" />
0
Trọng Nghĩa Đỗ