5

現在、スクロールビューの上部または下部に到達したときに表示される青い水平線の色を変更しようとしています。Android resフォルダー内を掘り下げようとしましたが、それへの明確な参照が見つかりませんでした。

どんな助けでも大歓迎です。

ありがとうございました。

更新:ScrollViewと設定getSolidColorを継承するクラスを別の値に実装しようとした後、機能していないようです。スクロールビューの下部または上部に到達したときに表示される水平バーは、まだ青色のままです。

更新2:実際には、エッジ効果の色について言及するべきではありませんでした。具体的には、オーバースクロール効果でしたが、その用語を認識していませんでした。

4

7 に答える 7

8

私の質問に対する部分的な回答が見つかりました。実際には ScrollView の overscroll 属性を参照していました。以下のコードを使用して無効にできるようです。

<ScrollView
...
android:overScrollMode="never"
... />

ただし、overScrollHeader および overScrollFooter 属性を使用して色を変更することはできません。これらの値は単に無視され、代わりにデフォルトの青色が表示されるためです。

于 2012-07-24T14:55:35.167 に答える
3

いくつかの反射EdgeEffectで a の色を変更できます。ScrollView

public static void setEdgeGlowColor(final ScrollView scrollView, final int color) {
    try {
        final Class<?> clazz = ScrollView.class;
        final Field fEdgeGlowTop = clazz.getDeclaredField("mEdgeGlowTop");
        final Field fEdgeGlowBottom = clazz.getDeclaredField("mEdgeGlowBottom");
        fEdgeGlowTop.setAccessible(true);
        fEdgeGlowBottom.setAccessible(true);
        setEdgeEffectColor((EdgeEffect) fEdgeGlowTop.get(scrollView), color);
        setEdgeEffectColor((EdgeEffect) fEdgeGlowBottom.get(scrollView), color);
    } catch (final Exception ignored) {
    }
}

@SuppressLint("NewApi")
public static void setEdgeEffectColor(final EdgeEffect edgeEffect, final int color) {
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            edgeEffect.setColor(color);
            return;
        }
        final Field edgeField = EdgeEffect.class.getDeclaredField("mEdge");
        final Field glowField = EdgeEffect.class.getDeclaredField("mGlow");
        edgeField.setAccessible(true);
        glowField.setAccessible(true);
        final Drawable mEdge = (Drawable) edgeField.get(edgeEffect);
        final Drawable mGlow = (Drawable) glowField.get(edgeEffect);
        mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN);
        mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN);
        mEdge.setCallback(null); // free up any references
        mGlow.setCallback(null); // free up any references
    } catch (final Exception ignored) {
    }
}
于 2015-01-20T21:03:29.527 に答える
2

これを達成するための非常に単純な(しかしハックな)方法を見つけました(グローの色を変更します):

int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", "drawable", "android");
Drawable androidGlow = context.getResources().getDrawable(glowDrawableId);
androidGlow.setColorFilter(brandColor, PorterDuff.Mode.MULTIPLY);

グロー エフェクトが実際には Drawable であるという事実を利用して (そして、それを unmutate して)、それにフィルターを適用しました。詳細はこちら: http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/

于 2013-12-09T19:09:29.800 に答える
1

フェード エッジと ScrollView の背景に同じ色が必要な場合は、次のように追加できます。

<ScrollView
...
android:background="@color/yourColor"
... />

エッジを別の色にしたい場合は、ScrollView を拡張してgetSolidColor()メソッドをオーバーライドする必要があります。

于 2012-07-22T19:35:29.570 に答える
1

api を使用してこれを行う簡単な方法はないようです。ScrollViewただし、メソッドを拡張してオーバーライドしgetSolidColor()、背景を別の色に設定することもできます。

    new ScrollView(this) {
        @Override
        @ExportedProperty(category = "drawing")
        public int getSolidColor() {
            // Set a background color to a color you want for the edges.
        }
    };
于 2012-07-22T19:25:11.393 に答える