这里有一些类似的问题,但答案是仅删除高程和阴影...不是我想要的:Android CardView with weird border when transparent
我想要的是 Pixel Launcher 搜索栏中显示的内容...即具有半透明背景和阴影的形状,但阴影不与白色形状重叠 (这最终会使它看起来是灰色的)。我基本上想要一个阴影,但在我的形状中间有一个洞......
这是我尝试过的,但您可以从附图中看到,灰色阴影是穿过半透明的白色背景的。
activity_main.xml
<FrameLayout
android:layout_width="120dp"
android:layout_height="120dp"
android:background="@drawable/rectangle"
android:elevation="8dp" />
矩形.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="4dp" />
<solid android:color="#aaffffff" />
</shape>
你可以看到,尽管我的形状是白色背景上的半透明白色,但由于下面的阴影,它变成了灰色,这不是我想要的。
我也尝试过使用 View#setOutlineProvider 但没有成功。
我也尝试过使用https://github.com/harjot-oberai/MaterialShadows
如果可以避免的话,我不想使用 9patch 图像。
最佳答案
一种解决方案是将透明度应用于框架本身,而不仅仅是矩形的背景。这将产生类似于如图所示的效果。
例如:
<FrameLayout
android:layout_width="120dp"
android:layout_height="120dp"
android:elevation="8dp"
android:alpha="0.6" />
如果您想要非透明元素,这当然会有问题,要解决此问题,您可以提取背景,并执行以下操作:
<FrameLayout
android:layout_width="120dp"
android:layout_height="120dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/rectangle"
android:alpha="0.6"
android:elevation="8dp" />
</FrameLayout>
关于android - 如何创建一个具有透明背景和阴影的形状,但形状轮廓后面的阴影不应该是可见的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54281499/