2017-01-03 57 views
1

我创建了一个简单的图层列表drawable,我想用它作为指标天气或不是设备在线。可绘制包括一个外环和一个内圆:Android图层列表可绘制的两个项目绘制得不正确,尺寸错误

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

在我的布局XML中,可绘制似乎当我将其指定为我的图像视图的源是正确的:

enter image description here

但是如果我的设备上运行的代码,它看起来像这样:

enter image description here

另外我必须在我的布局中设置宽度和高度,否则图像根本不会显示。

问题:

  • 我有什么做的,所以我可以在我的布局XML使用WRAP_CONTENT的widht /高度,并在层列表配置的大小?
+0

我相信,这只是截断,因为可用的大小小于10dp。而不是明确的大小尝试“match_parent”为两个圆和layout_margin =“4”为内圆 – cyanide

回答

0

试试这个layerlist绘制:

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

完美,谢谢。现在我可以在我的布局中使用wrap_content并在drawable中定义实际大小:) – xxtesaxx

0

使用此:

<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

谢谢,但我使用了KodyTsang解决方案。你能解释为什么你使用透明固体?我一直认为,应该尽可能地防止在手机上绘制透明的东西,以节省一些处理能力 – xxtesaxx

+0

@xxtesaxx其实外圈也是实心圆圈。为了显示它作为一个戒指,我用填充4dp的透明颜色,然后用1dp给中风。所以对于10dp都是灰色圆圈,上面的颜色变成透明(4dp)然后是笔画。我希望这有帮助。 – Spartan