2016-08-16 104 views
4

我最近在使用动画,并陷入困境,因为奇怪的原因,FrameLayout没有正确显示其阴影。关于Android clipToPadding属性的澄清

我找到了一个很好的答案,这对我很有帮助,但是使用了一个名为clipToPadding的属性。回答可以在这里找到:Android “elevation” not showing a shadow

但是,我真的很想了解这个属性的目的。我去到Android的文件,其中指出:

定义的ViewGroup是否会限制它的儿童和调整(但不 夹)任何EdgeEffect其填充,如果填充不为零。默认情况下,此 属性设置为true。

我已经阅读了很多次,我在网上找了个例子,但是我真的找不到一些。我发现的唯一的视觉效果相似,这ClipToPadding difference

我可以看到效果就行了,但它如何影响,只有一个ViewViewGroup例如当等

这将是很好如果有人能够提供我关于这个属性的几个关键点以及它如何与几个例子一起工作。

+2

呵呵。 Android文档有时可能会让人困惑,更不用说填充了语法错误,还有什么不是。也许[this](https://plus.google.com/photos/+AndroidDevelopers/albums/5984848297731814001)可以提供帮助吗? (您需要通过单击Read More扩展文本,位于GIF上方。) –

+0

基本上,如果您'clipToPadding = true',则父项将裁剪其子项,就好像填充的部分将子项隐藏在其下的一部分。我不知道我是否对你很有意义...:/ –

+1

嗯,我也设法找到与列表相同的例子,但我不明白,它是如何工作的,什么时候没有列表,但是普通[无列表]视图:( – rofl

回答

3

clipToPadding基本上意思是“如果视图超出其边界到填充区域中,则用父级填充覆盖此图形”。

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

this answer所述,当您有可滚动的视图(如ListView或RecyclerView)时,这也很有用。滚动列表时会将内容从界限中抽出。如果您设置了clipToPadding=false,那么您将能够看到该内容而不是填充,并且只能在完全向上或向下滚动时看到填充。

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

Bounds and padding

这是它的外观与clipToPadding=true,注意阴影是如何在底部,它介于这两种红色矩形之间剪短

clipToPadding=true

随着clipToPadding=false,我们看到整个影子:

enter image description here

这里是我使用的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> 

这里是为oval绘制:

<shape android:shape="oval"> 
     <solid android:color="#f2f2f2"/> 
</shape>