如何改变android高程阴影的方向?

Posted

技术标签:

【中文标题】如何改变android高程阴影的方向?【英文标题】:How to change direction of android elevation shadow? 【发布时间】:2015-12-17 02:58:57 【问题描述】:

我有带有 android:elevation="4dp" 的 FrameLayout。这个高地的阴影指向下方。我想改变阴影的方向。

<FrameLayout
    android:id="@+id/container"
    android:layout_
    android:layout_
    android:elevation="10dp"
    android:layout_marginBottom="100dp"
    android:background="@color/ColorPrimary"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">
</FrameLayout>

【问题讨论】:

这会不会与 UI 上的其他阴影不一致 您可以使用 xml 文件创建自定义阴影背景,而不是高程。这是示例想法 -***.com/questions/24095223/… 我认为两者在理想情况下是相同的,但是做的方式不同。 【参考方案1】:

我认为这种方法是最好的解决方案:Android Bottom Navigation Bar with drop shadow 谢谢,Alexander Bilchuk。

解决方案:

您可以使用简单视图及其背景在视图上方绘制自己的阴影:

<View
    android:layout_
    android:layout_
    android:layout_above="@id/bottom_bar"
    android:background="@drawable/shadow"/>

可绘制/shadow.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#1F000000"
        android:endColor="@android:color/transparent"
        android:angle="90" />
</shape>

此外,如果使用这种方法,也不会出现兼容性问题。

【讨论】:

当我这样做时,我看到添加的阴影和按钮之间有一点边距,它看起来不像阴影,并且在滚动时不会融入其中。 @reactor 这是因为视图确实占据了布局空间并出现了它的背景,空间不能被它下面的其他视图传输。【参考方案2】:

通过更改视图的轮廓提供程序,可以平移或在 x 和 y 方向上缩放视图投影,如post 中所述。

【讨论】:

您介意通过显示您的代码而不是发布某人帖子的链接来证明您的答案吗? 请勿发布包含资源链接但未包含相关内容的答案。【参考方案3】:

就我而言,你不会自己改变影子。在 Androids Material Design 中,阴影由您提升元素的数量自动确定。

根据这个问题https://graphicdesign.stackexchange.com/questions/80644/where-are-the-light-sources-located-in-material-design光源是

45 度高度和 90 度角

你真的不应该使用不同的阴影,因为它会破坏材料设计的整体一致性。那么你唯一应该做的就是提升你的元素。也许你应该重新阅读材料设计指南:https://material.io/guidelines/material-design/environment.html#environment-light-shadow

【讨论】:

这个答案应该是错误的,你只是给出你的意见,没有回应,我不明白是不能做还是你反对改变光源位置 这个问题涉及 android:elevation 和材料设计指南,你不应该自己改变阴影来匹配整体风格。如果您仍然想这样做,最好不要使用 android:elevation 而是创建自己的阴影 好的,谢谢,但我仍然不明白是否可以更改“光源”的 3d“位置”,或者原生阴影是否为“假”,material.io/guidelines/resources/shadows.html跨度> “光源”的“位置”是固定的,只能由谷歌更改。阴影实际上是简单的投影,而不是使用真实光源进行的一些花哨的 3D 渲染。每个海拔高度的值都略有不同,因此当海拔高度增加时,看起来某些东西会更靠近观察者。现实情况是,仅修改了阴影的扩散和强度。什么都没有真正感动。如果你需要改变“光源”的“方向”,你应该实现自己的阴影来匹配你的“光源”的风格 这是不正确的,您只需更改轮廓提供程序即可将阴影放置在任何您想要的位置。向上偏移轮廓提供程序并且阴影向上移动。阴影只是在视图之前绘制的一层,为什么你说你不能改变它。

以上是关于如何改变android高程阴影的方向?的主要内容,如果未能解决你的问题,请参考以下文章

android -constraintLayout如何将高程添加到粘性工具栏?

如何将高程(阴影)添加到我的 BottomNavigationView。默认情况下不会出现

如何正确设置recyclerview的高程值?

如何实现阴影和高程?安卓工作室

如何从一侧移除高程阴影而不从卡片或材质小部件中移除高程本身?

在棒棒糖前设备的工具栏上添加高程/阴影