Повноекранне фонове зображення в процесі діяльності


145

Я бачу багато програм, які використовують зображення в повноекранному режимі як фон. Це приклад:

Повноекранне фонове зображення

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

Проблема полягає в тому, що якщо на екрані з дуже високою роздільною здатністю, зображення опадає.

Інший варіант я думав, щоб використовувати зображення в FrameLayout, з match_parentв widthі в heightякості фону ... це розтягує зображення, але я думаю , що результат не дуже добре.

Як би ти це зробив?


3
Не вірте, що це працює на тлі, але це має працювати на зображеннях. android:scaleType="centerCrop"
EGHDK

Відповіді:


223

Є кілька способів зробити це.

Варіант 1:

Створіть різні ідеальні зображення для різних dpi та помістіть їх у відповідну папку, що малюється. Потім встановіть

android:background="@drawable/your_image"

Варіант 2:

Додайте єдине велике зображення. Використовуйте FrameLayout. Як першу дитину додайте ImageView. Встановіть наступне у своєму ImageView.

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

2
де ви зберігаєте "your_image"?
Атхарва Джонрі

5
У Res-> папки, що витягуються. Їх може бути декілька - кожен стенд для різної роздільної здатності (наприклад, низька роздільна здатність / висока роздільна здатність). Якщо у вас немає конкретних зображень для кожної роздільної здатності, будь-яке буде працювати.
krodmannix

5
Відповідь хороша. Але мені цікаво, чи знайшов хтось типовий розмір телефону для кожної групи dpi, що було б дуже корисно при підготовці зображень. Відредаговано: знайдено - stackoverflow.com/questions/10574363/…
fox

7
останній варіант -> поза пам'яттю: D
ternes3

1
Помилка OOM, тут ми приходимо ... якщо його велике зображення вам потрібно буде масштабувати вгору або вниз залежно від розміру екрана! у цьому випадку вам, швидше за все, потрібно буде завантажити растрову карту за допомогою асинхронного завдання.
Jonny2Plates

25

Інший варіант - додати одне зображення (не обов'язково велике) до рисунків (назвемо його 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
Це корисне рішення, але пам’ятайте, що виконувати обробку растрових файлів від основної теми: developer.android.com/training/displaying-bitmaps/…
Кайл Іві

19

Ви повинні розмістити зображення різних розмірів у папку "Наступні"

для більш детальної інформації відвідайте це посилання

  • ldpi

  • mdpi

  • hdpi

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

Я отримую помилку, щоUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein

Це робить мій Фрагмент настільки млявим. Не можу зрозуміти, чому.
Сермиліон

використовуйте кеш або завантажте зображення з picasso ( square.github.io/picasso ) сподівання вирішить вашу проблему
Munish Kapoor

7

А як на рахунок

android:background="@drawable/your_image"

про основний макет вашої діяльності?

Таким чином ви також можете мати різні зображення для різної щільності екрана, помістивши їх у відповідні res/drawable-**dpiпапки.


7

Минуло час, як це було розміщено, але це мені допомогло.

Можна використовувати вкладені макети. Почніть з відносного макета та розмістіть у ньому свій ImageView.

Встановіть висоту та ширину відповідно до прозорого, щоб заповнити екран.

Встановіть 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>

7

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

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

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


7

використовуй це

android:background="@drawable/your_image"

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


1

У рядках з відповіддю NoToast вам знадобиться мати кілька версій "your_image" у вашому res / dravable-ldpi, mdpi, hdpi, x-hdpi (для великих екранів xtra ), видалити match_parent та зберегти android: prilagodViewBounds = " правда "


1

Додайте android:background="@drawable/your_image"всередину вашої відносної версії / Linearlayout.


0

Якщо у вас є фонове зображення 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>

-1

Робочий. Ви повинні спробувати це:

android:src="@drawable/img"

-1

three step for put background

1) ви повинні вибрати собі подібну картину. наприклад: сюди введіть опис зображення

2) Потім ви копіюєте це зображення в малюванні. попередження: вам слід вибрати типи, короткі для зображення імені.

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

3) Ви переходите на сторінку xml Запропоновано та пишете:

android: background = "id picture", наприклад, мій ідентифікатор зображення @ dravable / download.

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

закінчити.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.