Android обрезать фон - PullRequest
28 голосов
/ 22 июля 2011

У меня есть LinearLayout с шириной fill_parent и высотой wrap_content. Теперь я хочу дать ему фон из png-файла, но если сделать это традиционным способом, LinearLayout изменит размер, чтобы показать весь фон вместо обрезки дополнительной части.

Как установить фон LinearLayout, чтобы он не менялся?

Спасибо

Ответы [ 4 ]

31 голосов
/ 06 сентября 2011

Похоже, что это возможно только при использовании ImageView и соответствующей настройке параметра scaleType.Быстрый обходной путь - использовать FrameLayout и поместить ImageView под другой макет с прозрачным фоном.

Код:

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

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/background" />

</FrameLayout>
6 голосов
/ 16 января 2012

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

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

http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap

1 голос
/ 05 февраля 2014

Я решил эту проблему путем создания подкласса LinearLayout и переопределения обратного вызова onMeasure(int,int), затем обновил XML макета, чтобы использовать мой новый тип макета.Я не могу опубликовать этот точный код, но я вызвал реализацию super.onMeasure(int,int) и проверил, вернулась ли измеренная высота в качестве точной высоты моего фонового изображения.Если это так, я беру измеренную высоту всех дочерних видов, затем вычисляю новое значение высоты и передаю его в setMeasuredDimension(int,int).

0 голосов
/ 13 сентября 2013

поместите этот код в действие xml, например activity_main.xml

<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/image" />
...