2016-08-16 124 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>