澄清Android clipToPadding属性

rof*_*ofl 5 android android-layout android-view

我最近正在使用动画,并且FrameLayout由于奇怪的原因没有正确显示其阴影时遇到了麻烦.

我找到了一个很好的答案,这对我很有帮助,但是有一个叫做的属性clipToPadding.答案可以在这里找到:Android"海拔"没有显示阴影

但是,我真的很想了解这个属性的用途.我去了Android的文档,其中指出:

如果填充不为零,则定义ViewGroup是否剪切其子节点并将任何EdgeEffect调整大小(但不剪切)到其填充.默认情况下,此属性设置为true.

我已经阅读了很多次,我在网上寻找了一些例子,但我真的找不到一些.我发现的唯一视觉效果与此ClipToPadding差异类似

我可以看到名单上的效果,但它如何影响,只有一个,当ViewViewGroup例如等.

如果有人可以提供一些关于这个属性的关键点以及如何使用一些例子,那将是很好的.

Sam*_*ter 14

clipToPadding 基本上意味着"如果视图超出其边界进入填充区域,则使用父级填充覆盖此绘图".

高架视图的阴影被绘制在视图的边界之外.为了使其可见,您需要确保视图周围有空间.您可以通过在父级上设置填充来实现此目的,但是您需要进行设置clipToPadding=false以便不覆盖阴影.

本回答所述,当您具有可滚动视图(例如ListView或RecyclerView)时,这也很有用.滚动列表时,将绘制内容超出其范围.如果设置clipToPadding=false,您将能够看到内容而不是填充,并且只有在完全向上或向下滚动时才能看到填充.

举个例子,让我们设置一个椭圆形作为视图的背景,让我们提升这个视图.我们还将在容器上设置一些填充.下面的屏幕截图是在开发人员选项中激活"显示布局边界"时拍摄的.两个红色矩形之间的区域是父级的填充.

界限和填充

这是它的外观clipToPadding=true,注意阴影如何在底部被剪裁,它将位于两个红色矩形之间:

clipToPadding =真

有了clipToPadding=false,我们看到了整个阴影:

在此输入图像描述

这是我使用的XML:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="#8888ff">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="40dp"
        android:paddingRight="40dp"
        android:paddingTop="20dp"
        android:paddingBottom="20dp"
        android:clipToPadding="false"
        android:layout_centerInParent="true">

        <View
            android:layout_width="170dp"
            android:layout_height="170dp"
            android:background="@drawable/oval"
            android:alpha="0.5"
            android:elevation="5dp"
            />

    </RelativeLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

以下是oval可绘制的:

<shape android:shape="oval">
        <solid android:color="#f2f2f2"/>
</shape>
Run Code Online (Sandbox Code Playgroud)