我的图层列表可绘制有什么问题?

时间:2016-04-08 18:40:28

标签: android android-drawable floating-action-button layer-list shapedrawable

我想在这个布局中将自定义drawable设置为FloatingActionButton的android:src:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <shape android:shape="oval">
            <solid android:color="#1AFF00" /> <!-- green -->
            <size android:width="150dp"
                android:height="150dp"/>
        </shape>
    </item>



    <item>
        <shape android:shape="oval">
            <solid android:color="#FC00FF" /> <!-- pink -->
            <size android:width="100dp"
                android:height="100dp"/>
        </shape>
    </item>



    <item>
        <shape android:shape="oval">
            <solid android:color="#0040FF" /> <!-- blue -->
            <size android:width="40dp"
                android:height="40dp" />
        </shape>
    </item>



    <item>
        <shape android:shape="oval" >
            <stroke android:width="3dp"
                android:color="#FF0000"/> <!-- red -->

            <solid android:color="#FFBF00" /> <!-- yellow -->
            <size android:width="24dp"
                android:height="24dp" />
        </shape>
    </item>

</layer-list>

我期待的是:

enter image description here

但我得到了:

enter image description here

这是自定义图层列表drawable,其中包含一些形状drawable:

RES /抽拉/ fab_drawable.xml:

{{1}}

1 个答案:

答案 0 :(得分:2)

虽然在语法上可以使用dp值,但这似乎会导致某些密度类别出现问题,因此请更好地使用px。 无论如何,形状drawable将被缩放以适合其包含View,您提供的值只会影响形状的比例。

对于你的图层列表drawable,你必须提供一个共同的&#34;框架&#34;对于所有形状可绘制的大小,因为每个图层将被缩放以适合View独立于其他图层。

这意味着较小的圆圈需要一些关于它们应该从边缘绘制多远的附加信息。对于以容器为中心的圆圈:

距离=(container_size - circle_size)/ 2

如果我们将150px作为所有drawable的基本大小,那么例如粉色圆圈(大小100px)需要25px距其容器边缘的距离。

您可以通过为每个item设置属性来提供此信息:

<item android:top="25px" android:left="25px" android:bottom="25px"  android:right="25px">
<shape android:shape="oval">
    <solid android:color="#FC00FF" /> <!-- pink -->
    <size android:width="100px"
          android:height="100px"/>
</shape>
</item>

请注意,不仅要为顶部/左侧,还要为底部/右侧提供属性,这一点非常重要。如果省略任何属性,则缩放将缩放以触摸相应的边缘,因此圆形可以呈现为椭圆形或偏心圆形。