2009-06-07 18 views
70

Ist es möglich, überlappende Ansichten in Android zu haben? Ich möchte ein ImageView mit einem transparenten PNG in der Front und einer anderen Ansicht im Hintergrund haben.Überlappende Ansichten in Android

edit:

Dies ist, was ich im Moment haben, das Problem ist, dass das Bild in der Imageview nicht transparent ist, die Teile, die transparent sein sollten, sind nur schwarz.

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

edit:

Ich habe es zu arbeiten, war es eine Design-Datei von einem anderen Programmierer im Team. geändert Gerade diese

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

dieser

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

Was haben Sie arbeiten sollten haben zu setzen - Sind Sie sicher, dass die Galerie hat sichtbaren Inhalt und dass die navigmaske drawable ist ein PNG mit Transparenz? –

+0

Ja, die Galerie ist ohne das Overlay sichtbar und ich bin sicher, dass das PNG transparent ist –

Antwort

68

Android behandelt Transparenz über Ansichten und Zeichen (einschließlich PNG-Bildern) nativ, so dass das von Ihnen beschriebene Szenario (ein teiltransparenter ImageView vor einem Gallery) sicherlich möglich ist.

Wenn Sie Probleme haben, kann es entweder auf das Layout oder Ihr Bild bezogen sein. Ich habe das von Ihnen beschriebene Layout repliziert und den gewünschten Effekt erfolgreich erzielt. Hier ist das genaue Layout, das ich verwendet habe.

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

Bitte beachte, dass ich das übergeordnete RelativeLayout bis zu einer Höhe und Breite von fill_parent geändert haben, wie allgemein ist, was Sie für eine Hauptaktivität möchten. Dann habe ich den oberen und unteren Rand des ImageView oben und unten auf dem Gallery ausgerichtet, um sicherzustellen, dass es vor ihm zentriert ist.

Ich habe auch explizit den Hintergrund der ImageView transparent sein.

Wie für das Bild selbst zeichnend, wenn Sie die PNG-Datei irgendwo für mich zu sehen, kann ich es in meinem Projekt verwenden und sehen, ob es verantwortlich ist.

+0

Schön! Ich habe versucht, einen ImageView-Hintergrund auf # 0000 (und @android: color/transparent) zu setzen ... ohne Erfolg. Wenn ich versuche, es zu verblassen (Alpha von 1.0 herunter zu 0.0), verblasst es zu Schwarz anstatt zu Transparent zu verblassen. Dies ist auf Android 2.0. –

+3

A-ha! Ich benutzte LinearLayout. Ich änderte es zu Relativ, dann legte ich das ImageView zuletzt. Jetzt funktioniert das Überblenden "einfach" ... yay! Vielen Dank für den Code/Tipp. Das hat mich bezüglich meines Schicksals geärgert. –

+2

Hallo ich benutze die gleiche XML-Layout-Codierung, aber mein transparentes Bild wird nicht angezeigt. Es zeigt nur schwarzen Bildschirm. Alles, was ich meinem Code hinzufügen möchte. – David

-2

Ja, das ist möglich. Die Herausforderung besteht jedoch darin, ihr Layout richtig zu machen. Am einfachsten wäre es, ein AbsoluteLayout zu haben und dann die zwei Bilder an die gewünschte Stelle zu setzen. Sie müssen nichts Besonderes für das transparente PNG tun, außer dass es später zum Layout hinzugefügt wird.

+15

AbsoluteLayout ist jetzt abgeschrieben. Niemand sollte es mehr benutzen. – num1

1

Sichtbare Galerie ändert die Sichtbarkeit, wodurch Sie die Galerie über andere Ansichtsüberlappungen bringen. Die Home-Beispiel-App enthält einige gute Beispiele für diese Technik.

9

Schauen Sie sich auch FrameLayout an, so implementiert die Gallery-Anwendung der Kamera das Zoom-Schaltflächen-Overlay.

+1

Ich habe mich immer für 'FrameLayout' entschieden, was ich für solche Zwecke perfekt finde. Ich habe jedoch erst jetzt herausgefunden, dass "FrameLayout" vor API 11 die maximal gemessene Höhe nicht an alle untergeordneten Elemente weitergibt (siehe hier) (http://stackoverflow.com/q/15780884/1856738). Um Android 2 zu unterstützen, muss man daher "RelativeLayout" verwenden, es sei denn, man geht für eine vorbestimmte Höhe. –

7

Wenn Sie einen benutzerdefinierten Overlay-Bildschirm im Layout hinzufügen möchten, können Sie ein benutzerdefiniertes lineares Layout erstellen und die Steuerung von Zeichen- und Schlüsselereignissen steuern. Sie können meine tutorial- Overlay auf Android Layout- http://prasanta-paul.blogspot.com/2010/08/overlay-on-android-layout.html

+0

Sicherlich ein schönes Experiment, danke für die Freigabe des Codes. Dies kann jedoch einfach mit "FrameLayout" erreicht werden, es sei denn, Ihr spezifisches Szenario ist von einem Fehler vor der API 11 betroffen, [siehe hier] (http://stackoverflow.com/q/15780884/1856738), in welchem ​​Fall Sie immer noch können Verwende 'RelativeLayout'. –

0

Die simples Weg ist arround -40dp Marge am Buttom der oberen Imageview