23

私は、アクティビティの下部にあるframelayoutを使用して、フラグメントに影の効果を表示するために、android:elevationを追加します。しかし、影の効果は、上辺ではなく底辺にのみ現れ、いずれかの助言を与えることができますか?アンドロイド:仰角は下側にのみシャドー効果を持っています、どのようにシャドウ効果を上に表示するには?

<FrameLayout 
    android:id="@+id/bottom_container" 
    android:background="#00737f" 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:layout_gravity="bottom" 
    android:elevation="4dp" 
    android:layout_alignParentBottom="true" 
    android:layout_marginBottom="50dp"/> 

答えて

17

ビューの上にシャドウを表示するためのトリックがあります。

基本的には、外部レイアウトがシャドウをelevationでキャストし、内側のレイアウトがbackgroundに設定されている2つのネストされたレイアウトを使用する必要があります。 はその後、外側のレイアウトにpaddingを設定することにより、我々はこのように影のより多くが見えるようになり、影を移動することなく、ダウンインナーレイアウトをシフトすることができます

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:layout_alignParentBottom="true" 
    android:layout_marginBottom="50dp" 
    android:elevation="4dp" 
    android:outlineProvider="bounds" 
    android:paddingTop="2dp" 
    android:layout_marginTop="-2dp"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#00737f"> 

     <!-- content --> 

    </FrameLayout> 

</FrameLayout> 

ここで重要なのは属性outlineProviderである、つまりバックグラウンドが設定されていなくても、外側のレイアウトをシャドウにする必要があります。

さらに、埋め込みによって作成されたオフセットを補正するために、負の値marginを指定します。ユースケースに応じて、それを省略することができます。

しかし注意:我々はあまりにも多くのビューをシフトした場合、いくつかのレンダリングアーティファクトが見えるようになる:

android elevation shadow offset examples

Source of this example on Github

関連する問題