Scrollview&RecycleView&ListView&Viewpager的顶部/底部阴影颜色改变
0 利用主题设置
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:colorEdgeEffect">@color/colorAccent</item>
</style>
但是注意,只能在api21以上设置
以下的方法为反射设置
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