2012-04-07 6 views
8

Der Versuch, LayerDrawable (in XML als Layer-Liste definiert) zu verwenden, um mehrere Form-Drawables übereinander zu schichten. als Hintergrund für ein Layout verwendet werden.Verhindern der Skalierung von Formen in einer LayeredList ohne Verwendung der Bitmap

Die Android-Führung (for LayerList) sagt:

Alle ziehbar Artikel die Größe des umschließenden Ansicht, standardmäßig passen skaliert. Wenn Sie also Ihre Bilder in einer Ebenenliste unter verschiedenen Positionen platzieren, wird die Größe der Ansicht möglicherweise erhöht, und einige Bilder skalieren als . Um zu vermeiden, dass Elemente in der Liste skaliert werden, verwenden Sie ein <bitmap> Element innerhalb des Elements , um das Zeichen festzulegen und die Schwerkraft für etwas zu definieren, das nicht skaliert, z. B. "center".

Ich will nicht meine Formen skalieren, aber ich bin nicht sicher, wie man sie richtig in bitmap Tags wickeln: es erzeugt einen Fehler, wenn ich es wie folgt:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_one" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_two" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_three" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_four" 
      android:gravity="center" /> 
    </item> 
</layer-list> 

Beschweren:

Binary XML-Datei Zeile # 25: <bitmap> benötigt eine gültige Attribut src

Ein Beispiel für eine der Zeichen, z. res/ziehbar/layer_one.xml:

<?xml version="1.0" encoding="utf-8"?> 

<!-- res/drawable/layer_one.xml --> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <solid android:color="#FFFFFF"/> 
    <corners 
     android:bottomRightRadius="15dp" 
     android:bottomLeftRadius="15dp" 
     android:topLeftRadius="15dp" 
     android:topRightRadius="15dp" /> 
</shape> 

Das Beispiel auf der Android-Website verwendet, um Bilder als Drawables verwendet, nicht XML definierte Formen (um nicht zu sagen, dass mein Fehler auf diese spezifisch ist, und dass ich nicht irgendwo einen dummen Fehler gemacht). Irgendwelche Hinweise geschätzt, danke.


Using drawable resources
diese Antwort auf die Frage besagt, dass Sie keine XML-ziehbar als src für eine Bitmap verwenden können. Ich habe den Titel der Frage geändert, um nun zu fragen, wie man das Skalieren von Formen verhindern kann (dadurch wird die Containeransicht geändert), ohne bitmap zu verwenden, oder bin ich gezwungen, tatsächliche Bildressourcen zu verwenden?


Added ein Bild von dem gewünschten Ergebnis - die Fähigkeit, einen Hintergrund mit einer regelmäßigen Rechteck gefüllt Form zu haben oder was auch immer, und dann geschichtet auf diesen, mehr Form Drawables (hier gibt es 3 Ellipsen). Auf der linken Seite ist ideal, wo oben und links Offsets erlaubt sind, und auf der rechten Seite ist in Ordnung, in der alle Formen in eine Standardposition gehen Sie einfach:

enter image description here

Antwort

2

Ja, (nach meinem vorherigen answer) Sie können nicht XML für Bitmaps zeichnen. Es ist in Ordnung zu bauen, aber wenn Sie die App ausführen, stürzt es ab.

In Bezug auf die Aussage use a <bitmap> element inside the <item> element bedeutet, dass Sie weitere Formen in Ihrer Layer-Liste definieren können, und das ist, was es ist. Sie können zwar auch Bitmaps definieren, aber Ihre Bitmaps sollten einen src Wert haben, der sich auf ein Vollbild bezieht (nicht auf xml).

Was Sie tun können, ist das Einfügen der xml-Dateilayer_one, layer_two und anderer Ebenen in Ihre XML-Datei_layer_list. Zum Beispiel:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item> 
     <shape 
      android:shape="rectangle" > 
      <solid android:color="#FFFFFF" /> 

      <corners 
       android:bottomLeftRadius="15dp" 
       android:bottomRightRadius="15dp" 
       android:topLeftRadius="15dp" 
       android:topRightRadius="15dp" /> 
     </shape> 
    </item> 

    <!-- and so on with your other shapes --> 

</layer-list> 

Hoffnung sollte :)

+0

Leider Waqas arbeiten, die Backticks vergessen, wenn sie von Android Entwickler-Website zitiert, soll nun „verwenden, um ein Element im Elemente“, fixierte lesen. Die Methode, die Sie beschreiben, ist, was ich begann, aber die Formen skalieren, um die übergeordnete Ansicht zu füllen, die ich versuche zu vermeiden :( – ataulm

+0

Ja, diese Aussage ist immer noch gültig für die Verwendung von Bitmaps mit gültigen src Attribut (nicht Bezug auf xml zeichnend) als drawable in der layer-list. Sogar in androids entwickler site, sie verwenden solide bilder als beispiel. Was willst du produzieren? Kannst du es als bild posten? vielleicht kann ich ihnen einige andere lösungen vorschlagen – waqaslam

+2

die aussage ist nicht gültig, wenn die Gravitation (der Bitmap) auf "zentriert" gesetzt wird, was eine Skalierung verhindert. Ich hatte gehofft, eine Reihe gefüllter Ellipsen zu definieren, die (in abnehmender Größe) übereinander geschichtet sind. (Experiment, nicht final) design: P) Wird ein Bild innerhalb von 10 Minuten posten – ataulm