Ist es möglich, überlappende Ansichten in Android zu haben? Ich hätte gerne eine ImageView mit einem transparenten PNG vorne und einer anderen Ansicht im Hintergrund.
bearbeiten:
Dies ist, was ich im Moment habe, das Problem ist, dass das Bild in der Bildansicht 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>
bearbeiten:
Ich habe es zum Laufen gebracht, es war eine Themendatei von einem anderen Programmierer im Team. Hab das gerade geändert
<item name="android:background">#FF000000</item>
dazu
<item name="android:background">#00000000</item>
android
view
android-relativelayout
Alexander Stolz
quelle
quelle
Antworten:
Android behandelt die Transparenz über Ansichten und Zeichnungen (einschließlich PNG-Bilder) nativ, sodass das von Ihnen beschriebene Szenario (teilweise transparent
ImageView
vor aGallery
) durchaus möglich ist.Wenn Sie Probleme haben, hängt dies möglicherweise entweder mit dem Layout oder Ihrem Bild zusammen. 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>
Beachten Sie, dass ich das übergeordnete Element
RelativeLayout
auf eine Höhe und Breite geändert habe,fill_parent
wie es im Allgemeinen für eine Hauptaktivität gewünscht wird. Dann habe ich die Ober- und UnterseiteImageView
der oben und unten ausgerichtet,Gallery
um sicherzustellen, dass sie davor zentriert ist.Ich habe auch den Hintergrund des explizit so eingestellt
ImageView
, dass er transparent ist.Wenn Sie die PNG-Datei an einem für mich sichtbaren Ort ablegen, kann ich sie in meinem Projekt verwenden und prüfen, ob sie dafür verantwortlich ist.
quelle
FrameLayout
dass für solche Zwecke generell bevorzugt werden sollte, um den viel geringeren Layout-Overhead zu gewährleisten. Für API <11 kann FrameLayout die oben genannte Kombination der Weitergabe der Größe des zweiten Kindes an das erste Kind jedoch nicht korrekt verarbeiten.RelativeLayout
Dies ist in diesem Fall Ihre einzige Option. siehe hier .Schauen Sie sich auch an
FrameLayout
, wie die Galerie-Anwendung der Kamera die Überlagerung der Zoom-Schaltflächen implementiert.quelle
FrameLayout
die ich für solche Zwecke perfekt finde. Ich habe jedoch erst jetzt herausgefunden, dass vor API 11FrameLayout
die maximal gemessene Höhe nicht an alle untergeordneten Elemente weitergegeben werden kann ( siehe hier) . Daher muss man für die Unterstützung von Android 2 verwenden, esRelativeLayout
sei denn, man wählt eine vorgegebene Höhe.Wenn Sie Ihrem Layout einen benutzerdefinierten Überlagerungsbildschirm hinzufügen möchten, können Sie ein benutzerdefiniertes lineares Layout erstellen und die Steuerung von Zeichnungen und Schlüsselereignissen erhalten. Sie können mein Tutorial- Overlay auf Android Layout- http://prasanta-paul.blogspot.com/2010/08/overlay-on-android-layout.html
quelle
FrameLayout
sei denn, Ihr spezifisches Szenario ist von einem Fehler vor API 11 betroffen ( siehe hier) . In diesem Fall können Sie es weiterhin verwendenRelativeLayout
.Die sichtbare Galerie ändert die Sichtbarkeit. Auf diese Weise erhalten Sie die Galerie über andere Ansichtsüberlappungen. Die Home-Beispiel-App bietet einige gute Beispiele für diese Technik.
quelle
Die einfache Möglichkeit besteht darin, einen Rand von -40 dp am unteren Rand der oberen Bildansicht zu platzieren
quelle
Ja das ist möglich Die Herausforderung besteht jedoch darin, das Layout richtig zu gestalten. Der einfachste Weg, dies zu tun, wäre, ein AbsoluteLayout zu haben und dann die beiden Bilder dort zu platzieren, wo Sie sie haben möchten. Sie müssen nichts Besonderes für das transparente PNG tun, außer es später zum Layout hinzuzufügen.
quelle