设置fadingEdgeLength及屏蔽顶部阴影
设置fadingEdge和fadingEdgeLength的效果图(上下阴影遮挡,也可设置左右阴影遮挡)
Android中所有的view都可设置,一般是可滚动的view设置了才有效果,不滚动的一般无效
例如(xml文件设置) : 设置fadingEdge和fadingEdgeLength :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:layout_marginTop="@dimen/lay_20"
android:layout_marginRight="@dimen/lay_20"
android:layout_marginLeft="@dimen/lay_20"
android:id="@+id/activity_shop_terms_scroll"
android:layout_above="@id/activity_shop_terms_bottom"
android:layout_width="match_parent"
android:requiresFadingEdge="vertical"
android:fadingEdge="vertical"
android:fadingEdgeLength="@dimen/lay_50"
android:layout_height="match_parent">
<TextView
android:id="@+id/activity_shop_terms_details"
android:textSize="@dimen/font_15"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.NestedScrollView>
</RelativeLayout>
屏蔽顶部阴影
现在我想要的效果是只要下面的阴影,想屏蔽掉顶部只留下底部的阴影
发现这个没有可用的api设置,只能通过我们自己想办法实现
1.先找到源码里哪里使用了,通过NestedScrollView及子类哪里解析了fadingEdgeLength这个属性,发现View.java文件里有解析
这里解析并赋值
(android-28/view.java)
protected void initializeFadingEdgeInternal(TypedArray a) { //这里解析值
initScrollCache();
mScrollCache.fadingEdgeLength = a.getDimensionPixelSize(
R.styleable.View_fadingEdgeLength,
ViewConfiguration.get(mContext).getScaledFadingEdgeLength());
}
在draw方法里找到 根据值设置并画出图形
public void draw(Canvas canvas) {
...... //省略代码
final ScrollabilityCache scrollabilityCache = mScrollCache;
final float fadeHeight = scrollabilityCache.fadingEdgeLength;
int length = (int) fadeHeight;
// clip the fade length if top and bottom fades overlap
// overlapping fades produce odd-looking artifacts
if (verticalEdges && (top + length > bottom - length)) {
length = (bottom - top) / 2;
}
// also clip horizontal fades if necessary
if (horizontalEdges && (left + length > right - length)) {
length = (right - left) / 2;
}
if (verticalEdges) { //(纵向)这里为设置阴影长度代码
topFadeStrength = Math.max(0.0f, Math.min(1.0f, getTopFadingEdgeStrength()));
drawTop = topFadeStrength * fadeHeight > 1.0f;
bottomFadeStrength = Math.max(