如何在xml中使用纯色形状后面的drawable添加阴影?

Posted

技术标签:

【中文标题】如何在xml中使用纯色形状后面的drawable添加阴影?【英文标题】:How to add shadow using a drawable behind solid color shape in xml? 【发布时间】:2014-12-29 16:50:01 【问题描述】:

我有一个 .png 图像,它是一个圆形,只是一个阴影。我所拥有的是一个ImageButton,它有一个android:src 属性的图像。对于它的背景,我可以在可绘制文件中有一个 xml 文件。我现在想要的是让作为 png 的阴影图像位于另一个实体形状的后面 -> android:shape="oval"。

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

    <item android:drawable="@drawable/shadowimg" />

    <item>
        <shape android:shape="oval">

            <solid
                android:color="#d63a33"/>

            <size
                android:
                android:/>
        </shape>
    </item>
</layer-list>

正如您在代码中看到的,我正在添加一个带有 android:drawable 属性的阴影图像的项目。然而,这并没有让影子显现。它只是显示红色圆圈形状。但我想要实心红色圆形后面的阴影图像。根据我对 layer-list 的一点了解,顶部的项目放在后面,底部的项目排在第一位。

更新:将图像阴影移动到底部后,我得到了效果,但是实心红色圆圈的大小太大,改变大小不会改变大小。

更新代码:

<?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="#d63a33"/>

            <size
                android:
                android:/>
        </shape>
    </item>
    <item android:drawable="@drawable/shadowimg" />
</layer-list>

**** 更新 2:**** 我注意到当我删除 &lt;item android:drawable="@drawable/shadowimg" /&gt; 时,我可以更改实心圆形的大小,但是当我添加它时,它默认为更大的大小。

会发生这样的事情:

如果有人需要,这里是阴影图像:

【问题讨论】:

基本上“更新代码:”是可绘制文件夹中的一个 xml 文件,在我的活动中有一个 ImageButton。它的android:srcandroid:background 的xml 可绘制对象具有完全独立的图像。是的,清理和重建显示没有变化 您是否尝试过使用选择器? ***.com/questions/8339529/… @NguyenDoanTung 恐怕不行 @NguyenDoanTung 使用选择器用于不同的按钮状态。现在我只是担心默认状态。 【参考方案1】:

我认为这应该是您的解决方案:

<?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="#d63a33" />

        <size
            android:
            android: />
    </shape>
 </item>

 <item>
    <bitmap android:src="@drawable/shadowimg" />
 </item>

 <item>
    <shape android:shape="oval" >
        <solid android:color="#00000000" />

        <size
            android:
            android: />
    </shape>
 </item>

 </layer-list>

我添加了另一个具有所需大小的透明层。

【讨论】:

不幸的是它仍然是一样的。如果您想测试,我还添加了我正在使用的阴影图像 所以问题来自android:src。背景尺寸由顶层(android:src)控制。您可以删除它,或者只是将其移动到图层列表,或者在 Photoshop 中创建按钮(最简单的方法)。 删除 android:src 属性只会删除加号按钮,其余部分保持不变。【参考方案2】:

实际上问题出在您使用的阴影中,阴影本身会留下一些填充。所以我们可以做的是,在我们使用描边填充第一项的纯色中留出一些空间。

使用此代码:

<?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="#d63a33" />

            <stroke
                android:
                android:color="#00000000" />
        </shape>
    </item>
    <item android:drawable="@drawable/shadowimg"/>
</layer-list>

然后使用 30dp 的高度和 30dp 的宽度,如

<TextView
    android:id="@+id/titleText"
    android:layout_
    android:layout_
    android:layout_centerVertical="true"
    android:layout_marginLeft="16dp"
    android:background="@drawable/circle_white"
    android:fontFamily="sans-serif-thin"
    android:gravity="center"
    android:text="Hi"
    android:textColor="#FF000000"
    android:textSize="16sp" />

如果你想增加视图的高度和宽度,只需增加笔画的宽度即可..

【讨论】:

以上是关于如何在xml中使用纯色形状后面的drawable添加阴影?的主要内容,如果未能解决你的问题,请参考以下文章

Android Drawable:在 XML 文件中以百分比指定形状宽度?

Android 按钮使用相同的 Drawable 形状但使用不同的颜色

Android - 使用 xml drawable 制作检查图标

如何在 Android 中使用 XML 作为可绘制对象创建自定义形状?

如何将形状drawable和drawable组合成单个drawable

android形状drawable