【问题标题】:Android Material shadow looks weird with custom OutlineProvider使用自定义 OutlineProvider 的 Android 材质阴影看起来很奇怪
【发布时间】:2017-04-20 14:51:12
【问题描述】:

我试图为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());
    }
}

阴影看起来接近正确,但有一些额外的、无法解释的线条

外观:

它应该是什么样子:

上图不是平滑渐变,看起来像是有两条线。

有没有办法解决这个奇怪的渲染?或者另一种为底部对齐的TabLayout添加阴影的方法?

【问题讨论】:

    标签: android material-design android-tablayout


    【解决方案1】:

    这是我能想到的最好的。我删除了自定义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>
    

    然后我在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"
        />
    

    它看起来基本上是库存,没有明显的问题。像ScrollViews 这样的东西甚至会像在普通阴影中一样在它下面渲染。

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2017-06-07
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多