Перекриваються подання в Android


75

Чи можна мати перекриваються подання в Android? Я хотів би мати ImageView із прозорим png спереду та іншим видом у фоновому режимі.

редагувати:

Це те, що я маю на даний момент, проблема в тому, що зображення в imageView не прозоре, а частини, які повинні бути прозорими, просто чорні.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/gallerylayout"
>
<Gallery android:id="@+id/overview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

 <ImageView android:id="@+id/navigmaske"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/navigmask"
    /> 

</RelativeLayout>

редагувати:

Я змусив це працювати, це був файл теми від іншого програміста в команді. Просто змінив це

<item name="android:background">#FF000000</item>

до цього

<item name="android:background">#00000000</item>

Те, що ви отримали, повинно працювати - Ви впевнені, що в галереї є видимий вміст і що навігаційна маска, яку можна малювати, є PNG із прозорістю?
Reto Meier

Так, галерея видима без накладання, і я впевнений, що PNG прозорий
Олександр Штольц,

Відповіді:


71

Android обробляє прозорість для подань та малюнків (включаючи зображення PNG), тому сценарій, який ви описуєте (частково прозорий ImageViewперед a Gallery), безумовно, можливий.

Якщо у вас виникли проблеми, це може бути пов’язано або з макетом, або з вашим зображенням. Я повторив макет, який ви описуєте, і успішно досяг того ефекту, який вам потрібен. Ось точний макет, який я використав.

<RelativeLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/gallerylayout"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <Gallery
    android:id="@+id/overview"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
  />
  <ImageView
    android:id="@+id/navigmaske"
    android:background="#0000"      
    android:src="@drawable/navigmask"
    android:scaleType="fitXY"
    android:layout_alignTop="@id/overview"
    android:layout_alignBottom="@id/overview"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
  />
</RelativeLayout>

Зверніть увагу, що я змінив батьківський RelativeLayoutстатус на висоту та ширину, fill_parentяк це зазвичай потрібно для основної діяльності. Потім я вирівняв верхню та нижню частину ImageViewверхньої та нижньої частин, Galleryщоб переконатися, що вона розташована по центру перед нею.

Я також чітко встановив, щоб фон ImageViewбув прозорим.

Що стосується самого зображення, яке можна малювати, якщо ви покладете кудись файл PNG, щоб я подивився, я можу використовувати його у своєму проекті та перевірити, чи відповідає він за це.


Приємно! Я спробував встановити для ImageView тла # 0000 (та @android: кольоровий / прозорий) ... безрезультатно. Якщо я спробую зникнути (альфа з 1,0 до 0,0), він зникає до чорного, а не до прозорого. Це на Android 2.0.
Джо Д'Андреа

3
А-ха! Я використовував LinearLayout. Я змінив його на Relative, а потім став ImageView останнім. Тепер затухання "просто працює" ... так! Дякую тоннам за код / ​​підказку. Це кинуло мене на мого дурня.
Джо Д'Андреа

2
Привіт, я використовую те саме кодування макета XML, але моє прозоре зображення не відображається. На ньому відображається лише чорний екран. Все, що я хочу додати до свого коду.
Девід

Беручи до уваги функціональність, я б сказав, що FrameLayoutдля таких цілей слід віддавати перевагу взагалі заради набагато нижчих накладних витрат. Однак для API <11 FrameLayout не може впоратись із зазначеною вище комбінацією коректного поширення зросту другої дитини до першої дитини, тому RelativeLayoutце ваш єдиний варіант у цьому випадку; дивіться тут .
класний штабелер

9

Крім того, погляньте на FrameLayoutте, як саме програма «Галерея камери» реалізує накладання кнопок масштабування.


1
Я завжди ходив, для FrameLayoutчого я вважаю ідеальним для таких цілей. Однак я тільки зараз дізнався, що до API 11 FrameLayoutне вдалося поширити максимальну виміряну висоту для всіх своїх дітей, див. Тут . Отже, для підтримки Android 2 потрібно використовувати, RelativeLayoutякщо не йти на заздалегідь визначену висоту.
класний штабелер

7

Якщо ви хочете додати власний екран накладання на макет, ви можете створити власний лінійний макет і отримати контроль над кресленням та ключовими подіями. Ви можете підручник - Накладання на макет Android - http://prasanta-paul.blogspot.com/2010/08/overlay-on-android-layout.html


Звичайно, приємний експеримент, дякую, що поділилися кодом. Але цього можна просто досягти, FrameLayoutякщо на ваш конкретний сценарій не впливає помилка попереднього API 11, див. Тут , і в цьому випадку ви все ще можете використовувати RelativeLayout.
класний штабелер

1

Видима галерея змінює видимість, тобто ви отримуєте галерею в порівнянні з іншими переглядами. додаток Home sample має кілька хороших прикладів цієї техніки.


0

Простий спосіб обійти - поставити поле -40dp внизу на верхній частині зображення


-2

Так, це можливо. Проблема, однак, полягає в тому, щоб правильно зробити їх макет. Найпростіший спосіб зробити це - мати AbsoluteLayout, а потім розмістити два зображення там, де ви хочете. Вам не потрібно робити нічого особливого для прозорого png, крім того, щоб його додати пізніше до макета.


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