Scrollview&RecycleView&ListView&Viewpager的顶部/底部阴影颜色改变

Scrollview&RecycleView&ListView&Viewpager的顶部/底部阴影颜色改变

0 利用主题设置


 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        -- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary
        "colorPrimaryDark">@color/colorPrimaryDark
        "colorAccent">@color/colorAccent
        "android:colorEdgeEffect">@color/colorAccent
    style>

但是注意,只能在api21以上设置

Scrollview&RecycleView&ListView&Viewpager的顶部/底部阴影颜色改变_第1张图片

以下的方法为反射设置

1 Scrollview

牵扯到的两个属性mEdgeGlowTop,mEdgeGlowBottom,都为EdgeEffect类型

直接去反射改变颜色
这里以 mEdgeGlowTop 为例


Field topMethod = ScrollView.class.getDeclaredField("mEdgeGlowTop");
topMethod.setAccessible(true);
EdgeEffect top = (EdgeEffect) topMethod.get(scrollView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    top.setColor(Color.RED);
}

2 RecycleView

RecycleView有4个属性,mLeftGlow, mTopGlow, mRightGlow, mBottomGlow

采用和Scrollview 同样的方式既可以做到

3 ListView

listview是有一个public的方法的


    /**
     * Sets the drawable that will be drawn above all other list content.
     * This area can become visible when the user overscrolls the list.
     *
     * @param header The drawable to use
     */
    public void setOverscrollHeader(Drawable header) {
        mOverScrollHeader = header;
        if (mScrollY < 0) {
            invalidate();
        }
    }


    /**
     * Sets the drawable that will be drawn below all other list content.
     * This area can become visible when the user overscrolls the list,
     * or when the list's content does not fully fill the container area.
     *
     * @param footer The drawable to use
     */
    public void setOverscrollFooter(Drawable footer) {
        mOverScrollFooter = footer;
        invalidate();
    }

4 viewpager

Viewpager同样有两个属性,是左右的,反射方式同样适用 Scrollview的,属性为mLeftEdge,mRightEdge

你可能感兴趣的:(Android)