android - 如何创建一个具有透明背景和阴影的形状,但形状轮廓后面的阴影不应该是可见的?

标签 android transparent shadow

这里有一些类似的问题,但答案是仅删除高程和阴影...不是我想要的:Android CardView with weird border when transparent

我想要的是 Pixel Launcher 搜索栏中显示的内容...即具有半透明背景和阴影的形状,但阴影不与白色形状重叠 (这最终会使它看起来是灰色的)。我基本上想要一个阴影,但在我的形状中间有一个洞......

这就是我想要实现的目标(底部的搜索栏): What I want

这是我尝试过的,但您可以从附图中看到,灰色阴影是穿过半透明的白色背景的。

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>

这就是我的尝试: My failed attempt

你可以看到,尽管我的形状是白色背景上的半透明白色,但由于下面的阴影,它变成了灰色,这不是我想要的。

我也尝试过使用 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/

相关文章:

android - Lawnchair + Android + PhoneGap 工作,但不持久

java - 如何使用 jsoup 获取 img src?

opengl - 使用 GLSL 时,多灯阴影映射无法正常工作

visual-studio - 我可以使用 C# 在 Visual Studio 2005 中创建透明按钮吗

android - 在android的位图上将白色转换为透明

ios - 如何将阴影添加到附加到 UICollectionView 中主视图的 UIView 渐变中

objective-c - UITableView 层上的内部阴影?

android - 如何提供SUMO遥测数据?

android - 在相机设置参数上获取空指针异常

css - 将带有 box-shadow 的 CSS star 转换为 PNG 图像以提高性能