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 に答える