9

默认情况下,仅当可以在该方向滚动时,才能看到滚动视图的淡入淡出边缘。我怎样才能让它始终可见?

我不想在顶部放置任何可绘制对象或类似的东西。我想使用内置的淡入淡出边缘来完成它,可能是通过覆盖一些滚动视图函数。

4

2 回答 2

25

是的,扩展 ScrollView 并覆盖这些方法(基于 Donut-release2):

@Override
protected float getTopFadingEdgeStrength() {
    if (getChildCount() == 0) {
        return 0.0f;
    }
    return 1.0f;
}

@Override
protected float getBottomFadingEdgeStrength() {
    if (getChildCount() == 0) {
        return 0.0f;
    }
    return 1.0f;
}

为了比较起见,这是原始代码,当您接近列表末尾时,它会缩短褪色边缘:

@Override
protected float getTopFadingEdgeStrength() {
    if (getChildCount() == 0) {
        return 0.0f;
    }

    final int length = getVerticalFadingEdgeLength();
    if (mScrollY < length) {
        return mScrollY / (float) length;
    }

    return 1.0f;
}

@Override
protected float getBottomFadingEdgeStrength() {
    if (getChildCount() == 0) {
        return 0.0f;
    }

    final int length = getVerticalFadingEdgeLength();
    final int bottomEdge = getHeight() - mPaddingBottom;
    final int span = getChildAt(0).getBottom() - mScrollY - bottomEdge;
    if (span < length) {
        return span / (float) length;
    }

    return 1.0f;
}
于 2011-08-01T04:41:06.853 回答
0

您还可以使用以下代码:

public class TopFadeEdgeScrollView extends ScrollView {

public TopFadeEdgeScrollView(Context context) {
    super(context);
}

public TopFadeEdgeScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public TopFadeEdgeScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
protected float getBottomFadingEdgeStrength() {
    return 0.0f;
}
}
于 2019-01-25T15:36:51.037 回答