使用自定义OutlineProvider,Android Material阴影看起来很奇怪

时间:2016-12-06 03:29:48

标签: android material-design android-tablayout

我尝试为View添加阴影。特别是底部对齐的TabLayout,默认情况下没有阴影。

我创建了一个自定义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

1 个答案:

答案 0 :(得分:0)

这是我能想到的最好的。我删除了自定义OutlineProvider。相反,我创建了一个这样的drawable:

<!--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>

然后我在View上方创建了TabLayout,并以阴影作为背景

    <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 s这样的东西甚至会像在普通阴影中一样呈现在它下面。