https://github.com/AndroidAlliance/EdgeEffectOverride

я есть тема, которая вытекает из световой темы Android по умолчанию. Мои ListViews настроены с белым фоном, и, как побочный эффект, я думаю, что цвет затухающего края - белый, а это не то, чего я хочу - я бы хотел, чтобы они были черными.

Кажется невозможным просто изменить цвет края (хотя я могу контролировать длину и другие факторы), и обычное предложение использовать черный цвет для цвета подсказки в listview приводит к некоторым довольно ужасным sid, э-эффектам при прокрутке списка ,

Кто-нибудь может посоветовать надежный способ изменить цвет исчезающей кромки на произвольный цвет?

Ответы на вопрос(7)

Решение Вопроса

вы не можете сделать это легко. Весь смысл исчезающих краев в том, чтобы отойти на задний план, а не нарисовать какой-нибудь случайный цвет. Однако вы можете попытаться расширить ListView и переопределить getSolidColor (), чтобы вернуть цвет, который вы хотите для исчезающих краев. Это должно работать просто отлично.

 Andrew Wyld26 нояб. 2012 г., 12:02
У меня была эта работа, но, как следует из названия метода, область затухания не реагирует на альфа цвета, который вы вводите.

Вы можете изменить цвет фейдера на любой другой, используя параметр: 'android: cacheColorHint'.

например:

<ListView
....
android:cacheColorHint="#FFFFFF"
/>
 Scott07 нояб. 2012 г., 03:11
Прозрачность на самом деле имеет смысл, и вы можете подумать, что это будет по умолчанию, но из-за того, как она реализована (в которой применяется наложение указанного цвета), это невозможно. Лучше всего либо использовать цвет, который больше всего напоминает ваш фон, либо, возможно, даже сделать его прозрачным - это лучшее решение.
 Andrew Wyld22 нояб. 2012 г., 13:24
Нет, он использует прозрачный без проблем, но теперь у меня нет исчезающих краев.
 Andrew Wyld26 нояб. 2012 г., 12:01
Ах, я понял тебя сейчас. Да, мне удалось угаснуть, перекрываяgetSolidColor() метод вListView сейчас, но, как следует из названия метода, прозрачное замирание не вариант. Как ни странно, по умолчаниюScrollView, как я могу видеть фоновое изображение через исчезать.
 Andrew Wyld06 нояб. 2012 г., 16:11
Я установил прозрачность, поэтому края не исчезают совсем. Вы можете обойти это?
 Scott23 нояб. 2012 г., 06:04
Это то, что я имею в виду. У вас есть углы затухания, но они прозрачные, поэтому вы не можете их видеть. Края применяются как наложение цвета, поэтому их прозрачность означает, что вы их не видите. Если вы ищете прозрачный эффект затухания, то, боюсь, вы не найдете его с помощью этого элемента управления.

я нашел очень простой (но хакерский) способ сделать это (изменить цвет свечения):

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

Я воспользовался тем, что эффект свечения на самом деле является Drawable (и не мутировал при этом), и применил к нему фильтр. Подробнее об этом здесь:http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/

который расширяет ListView. Вот:Можно ли изменить цвет FadingEdge в Listview?

что белый цвет был цветом «Overscroll», а не угасающим краем.

попробуйте это (предполагая, что вы хотите затухающий край, но не ужасный белый блик, когда вы попадаете на края!

<ListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:cacheColorHint="#00000000"
    android:requiresFadingEdge="vertical"
    android:fadingEdgeLength="10dp" 
    android:overScrollMode="never" >      </-- this is the line you want i think -->
</ListView> 

Вы можете изменитьEdgeEffect цветListView или жеGridView используя отражение. Скопируйте следующие статические фабричные методы в ваш проект и используйтеsetEdgeGlowColor(yourListView, yourAwesomeColor);:

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

public static void setEdgeEffectColor(EdgeEffect edgeEffect, int color) {
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            edgeEffect.setColor(color);
            return;
        }
        Field edgeField = EdgeEffect.class.getDeclaredField("mEdge");
        Field glowField = EdgeEffect.class.getDeclaredField("mGlow");
        edgeField.setAccessible(true);
        glowField.setAccessible(true);
        Drawable mEdge = (Drawable) edgeField.get(edgeEffect);
        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 (Exception ignored) {
    }
}

Ваш ответ на вопрос