デフォルトでは、スクロールビューのフェード エッジは、その方向にスクロールできる場合にのみ表示されます。いつでも見えるようにするにはどうすればよいですか?
上にドローアブルなどを置きたくありません。おそらくいくつかのスクロールビュー関数をオーバーライドすることにより、組み込みのフェージングエッジを使用してそれを達成したいと考えています。
デフォルトでは、スクロールビューのフェード エッジは、その方向にスクロールできる場合にのみ表示されます。いつでも見えるようにするにはどうすればよいですか?
上にドローアブルなどを置きたくありません。おそらくいくつかのスクロールビュー関数をオーバーライドすることにより、組み込みのフェージングエッジを使用してそれを達成したいと考えています。
はい、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;
}