2016-12-06 109 views
0

我試圖給View添加陰影。特別是底部對齊的TabLayout,默認情況下,它沒有陰影。Android材質陰影看起來很怪怪自定義OutlineProvider

我創建了一個自定義的OutlineProvider,並把它應用到TabLayout像這樣

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    TabLayout tabs = (TabLayout)findViewById(R.id.tabs); 
    tabs.setOutlineProvider(new ViewOutlineProviderTabs()); 
} 

public class ViewOutlineProviderTabs extends ViewOutlineProvider { 
    @Override 
    public void getOutline(View view, Outline outline) { 
     //create a rectangular outline 
     outline.setRect(0,-25,view.getWidth(),view.getHeight()); 
    } 
} 

陰影看起來接近正確的,但有一些額外的,原因不明的線

它的外觀:

Weird Shadow example如何看它:

enter image description here

頂部圖像不是一個平滑的漸變,它看起來像它有兩條線。

有沒有辦法解決這個奇怪的渲染?或者另一種將陰影添加到底部的方法TabLayout

回答

0

這是我能想到的最好的。我刪除了自定義OutlineProvider。相反,我創建了一個繪製這樣的:

<!--upshadow.xml--> 
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <layer-list> 
      <item > 
       <shape> 
        <gradient android:angle="90" 
         android:endColor="#00000000" android:startColor="#45000000" 
         android:centerY="25%" 
         android:centerColor="#25000000"/> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 

</selector> 

然後,我創建了TabLayout上方View與陰影爲背景

<android.support.design.widget.TabLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/tabs" 
     android:layout_alignParentBottom="true" 
     /> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="8dp" 
     android:layout_above="@id/tabs" 
     android:background="@drawable/upshadow" 
    /> 

它看起來基本的股票和具有不引起明顯的問題。像ScrollView這樣的東西甚至會像它們在正常陰影下一樣呈現在它下面。