Полноэкранное фоновое изображение в действии

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

Full screen background image

Я хочу использовать это в проекте, лучший способ, который я нашел до сих пор, - использовать изображение с большим размером, поместить его в ImageView и использовать android: adjustViewBounds="true" для настройки полей

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

Другим вариантом, о котором я думал, является использование изображения в FrameLayout, с match_parent в width и height в качестве фона... это растягивает изображение, но я думаю, что результат не очень хорош.

Как вы это сделаете?

Ответ 1

Есть несколько способов сделать это.

Вариант 1:

Создавайте разные идеальные изображения для разных точек и помещайте их в соответствующую папку. Затем установите

android:background="@drawable/your_image

Вариант 2:

Добавьте одно большое изображение. Используйте FrameLayout. В качестве первого ребенка добавьте ImageView. Установите в вашем ImageView следующее.

android:src="@drawable/your_image"
android:scaleType = "centerCrop"

Ответ 2

Другим вариантом является добавление отдельного изображения (не обязательно большого) в drawables (пусть его имя backgroung.jpg), создайте ImageView iv_background в корне вашего xml без атрибута "src". Затем в методе onCreate соответствующей активности:

    /* create a full screen window */
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.your_activity);

    /* adapt the image to the size of the display */
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(
      getResources(),R.drawable.background),size.x,size.y,true);

    /* fill the background ImageView with the resized image */
    ImageView iv_background = (ImageView) findViewById(R.id.iv_background);
    iv_background.setImageBitmap(bmp);

Нет обрезки, нет изображений разных размеров. Надеюсь, это поможет!

Ответ 3

Вы должны поместить изображения различных размеров в следующую папку

Подробнее см. ссылку

  • ldpi

  • MDPI

  • ИПЧР

  • xhdpi

  • xxhdpi

и используйте фон RelativeLayout или LinearLayout вместо использования 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"
 android:orientation="vertical"
 android:background="@drawable/your_image">

</RelativeLayout>

Ответ 4

Что насчет

android:background="@drawable/your_image"

в главном макете вашей деятельности?

Таким образом вы также можете иметь разные изображения для разных плотностей экрана, помещая их в соответствующие папки res/drawable-**dpi.

Ответ 5

используйте этот

android:background="@drawable/your_image

в вашей деятельности очень первый линейный или относительный макет.

Ответ 6

Если вы хотите, чтобы ваше изображение показывало BEHIND прозрачную панель действий, поместите следующее в определение стиля темы:

<item name="windowActionBarOverlay">true</item>
<item name="android:windowActionBarOverlay">true</item>

Наслаждайтесь!

Ответ 7

Прошло некоторое время, так как это было опубликовано, но это помогло мне.

Вы можете использовать вложенные макеты. Начните с RelativeLayout и поместите в него ImageView.

Установите высоту и ширину в match_parent, чтобы заполнить экран.

Установите scaleType = "centreCrop", чтобы изображение соответствовало экрану и не растягивалось.

Затем вы можете поместить любые другие макеты, как обычно, например LinearLayout ниже.

Вы можете использовать android: alpha для установки прозрачности изображения.

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

  <ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@drawable/image"
    android:alpha="0.6"/>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello"/>

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="There"/>

   </LinearLayout>
</RelativeLayout>

Ответ 8

В строках с ответом NoToast вам нужно будет иметь несколько версий "your_image" в ваших res/drawable-ldpi, mdpi, hdpi, x-hdpi (для больших экранов xtra), удалить match_parent и сохранить андроид: adjustViewBounds = "true"

Ответ 9

Добавьте android:background="@drawable/your_image" внутри своего Relativelayout/Linearlayout Работали.

Ответ 10

Если у вас есть bg.png в качестве фонового изображения, просто:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world"/>
</RelativeLayout>

Ответ 11

Рабочая. вы должны попробовать это:

android:src="@drawable/img"