2017-01-03 4 views
1

Ich erstellte eine einfache Layer-Liste Zeichen, die ich als Indikator Wetter oder nicht ein Gerät verwenden möchte, ist online. Die ziehbar besteht aus einem äußeren Ring und einen inneren Kreis:Android Layer-Liste Drawable mit zwei Objekten nicht richtig gezeichnet und mit falscher Größe

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:width="14dp" 
     android:height="14dp" 
     android:gravity="center"> 
     <shape android:shape="oval"> 
      <stroke 
       android:width="1dp" 
       android:color="@color/colorLightGray" /> 
     </shape> 
    </item> 
    <item 
     android:width="10dp" 
     android:height="10dp" 
     android:gravity="center"> 
     <shape android:shape="oval"> 
      <solid android:color="@color/colorLightGray" /> 
     </shape> 
    </item> 
</layer-list> 

enter image description here

In meinem Layout xml, die ziehbar scheint korrekt zu sein, wenn ich es als Quelle meiner Bildansicht zuweisen:

enter image description here

Allerdings, wenn ich den Code auf einem Gerät laufen, sieht es wie folgt aus:

enter image description here

Auch musste ich Breite und Höhe in meinem Layout einstellen sonst würde das Bild überhaupt nicht angezeigt.

FRAGEN:

  • Was muss ich tun, damit ich widht/Höhe wrap_content in meinem Layout xml und konfigurieren Sie die Größe in der Schicht-Liste verwenden?
+0

Ich glaube, es ist nur abgeschnitten, weil die zur Verfügung stehende Größe ist kleiner als 10dp. Statt expliziter Größe versuche "match_parent" für beide Kreise und layout_margin = "4" für den inneren Kreis – cyanide

Antwort

0

versuchen, diese layerlist ziehbar:

<?xml version="1.0" encoding="utf-8"?> 
 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
 
    <item android:gravity="center"> 
 
     <shape android:shape="oval"> 
 
      <size 
 
       android:width="14dp" 
 
       android:height="14dp" /> 
 
      <stroke 
 
       android:width="1dp" 
 
       android:color="@color/colorLightGray" /> 
 
     </shape> 
 
    </item> 
 
    <item 
 
     android:bottom="3dp" 
 
     android:left="3dp" 
 
     android:right="3dp" 
 
     android:top="3dp"> 
 
     <shape android:shape="oval"> 
 
      <size 
 
       android:width="10dp" 
 
       android:height="10dp" /> 
 
      <solid android:color="@color/colorLightGray" /> 
 
     </shape> 
 
    </item> 
 
</layer-list>

+0

Perfekt, danke. Jetzt kann ich wrap_content in meinem Layout verwenden und die tatsächliche Größe in der Zeichnungsdatei definieren :) – xxtesaxx

0

verwenden:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape 
      android:shape="oval"> 
      <solid 
       android:color="@android:color/transparent"/> 
      <padding 
       android:bottom="4dp" 
       android:left="4dp" 
       android:right="4dp" 
       android:top="4dp"/> 
      <stroke 
       android:width="1dp" 
       android:color="@color/colorLightGray"/> 
     </shape> 
    </item> 
    <item> 
     <shape 
      android:shape="oval"> 
      <solid 
       android:color="@color/colorLightGray"/> 
      <size 
       android:width="10dp" 
       android:height="10dp"/> 
     </shape> 

    </item> 
</layer-list> 
+0

Danke, aber ich ging mit KodyTsang Lösung. Können Sie erklären, warum Sie einen transparenten Feststoff verwenden? Ich dachte immer, dass das Zeichnen von transparentem Zeug auf dem Handy wann immer möglich verhindert werden sollte, um etwas Verarbeitungsleistung zu sparen. – xxtesaxx

+0

@xxtesaxx Eigentlich äußerer Ring auch fester Kreis. Um es als einen Ring zu zeigen, verwendete ich transparente Farbe zum Auffüllen von 4dp und gab dann einen Strich mit 1dp. Also für 10dp beide sind grauer Kreis nach dem oberen ändert sich die Farbe zu transparent (4dp) dann Strich davon. Ich hoffe das hilft. – Spartan

Verwandte Themen