自定义过度滚动发光/边缘颜色为ListView?

Ste*_*oen 10 android android-widget android-layout android-listview

我有一个ListView自定义样式,基本上看起来就像Holo,但有黄色的口音而不是蓝色.

当我滚动到列表的底部或顶部时,我得到了不合适的蓝色.我为overscroll_glow.png和制作了自定义绘图overscroll_edge.png,但我不知道如何使用它们.

我怎样才能让我ListView使用这些drawable而不是系统的drawable?

请问OverScroller类的帮助?

Men*_*nny 8

你可以使用类似反射的解决方案来破解你改变这种发光颜色的方法:

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

我遇到了同样的问题,这似乎是一个很好的解决方案,至少在Google添加用于更改颜色(或标记颜色)的API之前:http://evendanan.net/android/branding/2013/12/09/品牌边缘效应/

  • 乘法不好,因为它会混合你的颜色和默认的蓝色.你应该使用SrcAtop.它将完全取代旧的颜色. (2认同)

Min*_*Man 5

只需使用此库.我只是在没有过度滚动的设备(HTC One X/Sense 4.5)上在横向菜单中包装上下文时遇到问题.奇迹般有效!

https://github.com/AndroidAlliance/EdgeEffectOverride


hey*_*smo 4

试过这个吗?setOverscrollFooter(可绘制)?

更新1:

哎呀。没关系。您可能已经看过这个讨论。

发光行为包含在EdgeEffect 类中。setOverScrollMode(OVER_SCROLL_NEVER)您可以通过调用 ListView 然后滚动您自己的 EdgeEffect 类(目前我无法了解其详细信息)来禁用默认边缘效果。

更新2:

哎哟。对 AbsListView 中创建的 EdgeEffect 对象的调用深埋在滚动逻辑中。可能会很难。一个简单的修复方法是向 Android 团队请求setEdgeEffect(EdgeEffect)AbsListView 中的方法...