android - Android 5.0 上的小而宽 View 的阴影看起来很奇怪,但在 5.1 上却不是

标签 android android-5.0-lollipop shadow android-elevation

如果我在 Android 5.0 上向小而宽的 View 添加高度,阴影看起来真的很奇怪。但是,在 Android 5.1 上它看起来还不错。例如,请看下面的比较图像(请单击以全分辨率查看):

Comparison between 5.0 and 5.1

在 5.1 上阴影的形状是均匀的,而在 5.0 上它向屏幕边缘变薄。 View 越薄(即越小),效果越明显。

我不确定这是否是任何一个版本上的错误,但是我需要阴影在两个版本上看起来都像现在在 5.1 上的样子。

最佳答案

这是一个 hacky 的部分解决方法。阴影的形状取决于 View 的高度或更准确地说是轮廓的高度。所以我们要像这样设置自定义大纲:

view.setOutlineProvider(new ViewOutlineProvider() {
    @Override
    public void getOutline(final View view, final Outline outline) {
        outline.setRect(0, -128, view.getWidth(), view.getHeight());
    }
});

而不是 -128 选择任何足够大的数字(或者更好,从资源中加载维度值)。这是它的样子:

enter image description here

不幸的是,这个 hack 导致在 View 上方呈现奇怪的 Artifact 。但是,如果您在其上方有另一个 View (如工具栏),则这些将不可见。也许可以通过将 View 放在单独的布局中并调整其边界来裁剪 Artifact 。

关于android - Android 5.0 上的小而宽 View 的阴影看起来很奇怪,但在 5.1 上却不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32593076/

相关文章:

javascript - 如何在手机上调整html页面的大小

android - 从android http登录到grails 3 spring安全

android - 如何在 com.android.support :leanback-v17 中实现多于 2 级导航

css - 如何仅在边缘添加阴影以反转 c 径向渐变?

java - 如何使用 getDrawingCache 捕获带有阴影的屏幕截图?

java - 为什么线程中的公共(public)方法无法在 onCreate 中解析?

android - 自定义 ListView 不会替换 View

android:Theme.Material.Light 需要 API 级别 21(当前最低为 8)

android - ActivityManager getRunningTasks 不适用于 Lollipop?

objective-c - 在我的 UITableView 上放置渐变以显示单元格