如何在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:****
我注意到当我删除 <item android:drawable="@drawable/shadowimg" />
时,我可以更改实心圆形的大小,但是当我添加它时,它默认为更大的大小。
会发生这样的事情:
如果有人需要,这里是阴影图像:
【问题讨论】:
基本上“更新代码:”是可绘制文件夹中的一个 xml 文件,在我的活动中有一个ImageButton
。它的android:src
和android: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 作为可绘制对象创建自定义形状?