vivos saturacion para pantalla mas los contraste como colores color celular calibrar aumentar arreglar ajustar android android-5.0-lollipop overscroll

android - saturacion - Cómo cambiar el color del borde de desplazamiento excesivo y el brillo de desplazamiento excesivo



como calibrar colores en android (4)

¿Cómo cambiar el color del borde de sobre-desplazamiento y el resplandor de sobre-desplazamiento o cómo cambiar el color blanco (color predeterminado) de Android Lollipop 5.0?


En LOLLIPOP el brillo del borde se hereda de colorPrimary . Después de crear la vista, el color de brillo del borde solo se puede cambiar a través de la reflexión. Esto puede ser útil cuando carga colores dinámicamente usando la Palette .

EDIT: TL; DR: descargue la clase completa desde aquí: https://github.com/consp1racy/android-commons/blob/master/commons/src/main/java/net/xpece/android/widget/XpEdgeEffect.java

CONFIGURACIÓN DE PROGUARDO: si va a usar esto en widgets de la biblioteca de soporte, necesita mantener los nombres de los campos. La forma más rápida de hacerlo es la siguiente (aunque sigue siendo un desperdicio):

-keepclassmembers class * extends android.view.View { <fields>; } -keepclassmembers class android.support.v4.widget.EdgeEffectCompat { <fields>; }

Crea una clase de utilidad con el siguiente código:

private static final Class<?> CLASS_SCROLL_VIEW = ScrollView.class; private static final Field SCROLL_VIEW_FIELD_EDGE_GLOW_TOP; private static final Field SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM; private static final Class<?> CLASS_LIST_VIEW = AbsListView.class; private static final Field LIST_VIEW_FIELD_EDGE_GLOW_TOP; private static final Field LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM; static { Field edgeGlowTop = null, edgeGlowBottom = null; for (Field f : CLASS_SCROLL_VIEW.getDeclaredFields()) { switch (f.getName()) { case "mEdgeGlowTop": f.setAccessible(true); edgeGlowTop = f; break; case "mEdgeGlowBottom": f.setAccessible(true); edgeGlowBottom = f; break; } } SCROLL_VIEW_FIELD_EDGE_GLOW_TOP = edgeGlowTop; SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM = edgeGlowBottom; for (Field f : CLASS_LIST_VIEW.getDeclaredFields()) { switch (f.getName()) { case "mEdgeGlowTop": f.setAccessible(true); edgeGlowTop = f; break; case "mEdgeGlowBottom": f.setAccessible(true); edgeGlowBottom = f; break; } } LIST_VIEW_FIELD_EDGE_GLOW_TOP = edgeGlowTop; LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM = edgeGlowBottom; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static void setEdgeGlowColor(AbsListView listView, int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { EdgeEffect ee; ee = (EdgeEffect) LIST_VIEW_FIELD_EDGE_GLOW_TOP.get(listView); ee.setColor(color); ee = (EdgeEffect) LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(listView); ee.setColor(color); } catch (Exception ex) { ex.printStackTrace(); } } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static void setEdgeGlowColor(ScrollView scrollView, int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { EdgeEffect ee; ee = (EdgeEffect) SCROLL_VIEW_FIELD_EDGE_GLOW_TOP.get(scrollView); ee.setColor(color); ee = (EdgeEffect) SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(scrollView); ee.setColor(color); } catch (Exception ex) { ex.printStackTrace(); } } }


En pre-lollipop el efecto de brillo es en realidad un Drawable incrustado en los recursos del sistema operativo, puede aplicar un ColorFilter en eso:

public static void changeOverScrollGlowColor(Resources res, int colorID ) { try { final int glowDrawableId = res.getIdentifier("overscroll_glow", "drawable", "android"); final Drawable overscrollGlow = res.getDrawable(glowDrawableId); overscrollGlow.setColorFilter(res.getColor(colorID), android.graphics.PorterDuff.Mode.SRC_ATOP); final int edgeDrawableId = res.getIdentifier("overscroll_edge", "drawable", "android"); final Drawable overscrollEdge = res.getDrawable(edgeDrawableId); overscrollEdge.setColorFilter(res.getColor(colorID), android.graphics.PorterDuff.Mode.SRC_ATOP); } catch (Exception ignored) { } }

Llamarlo una vez en onCreate es suficiente.

changeOverScrollGlowColor(getResources(), R.color.colorPrimary);


Si está utilizando la última implementación de RecyclerView, es bastante sencillo cambiar el color del desbordamiento mediante programación. Utilice el siguiente código (implementación de Kotlin):

recyclerView.edgeEffectFactory = object : RecyclerView.EdgeEffectFactory() { override fun createEdgeEffect(view: RecyclerView, direction: Int): EdgeEffect { return EdgeEffect(view.context).apply { setColor(color) } } }

Tenga en cuenta que esto solo funciona para API nivel 21 (Lollipop) y superior. Si conoce el valor en el momento de la compilación, use colorEdgeEffect como lo señaló Ahmed.


El color de resplandor de desplazamiento excesivo hereda el valor de color primario establecido por android:colorPrimary en toda la aplicación. Pero si necesita especificar un valor diferente, simplemente use android:colorEdgeEffect .

<style name="MyAppTheme" parent="***"> <item name="android:colorEdgeEffect">@color/my_color</item> </style>