我有一個派生自Android的默認燈光主題的主題。我的ListViews被配置爲白色背景,我認爲這是一個副作用,漸變邊緣的顏色是白色的,這不是我想要的 - 我希望它們是黑色的。控制ListViews中的衰落邊緣的顏色
簡單地改變邊緣的顏色似乎是不可能的(儘管我可以控制長度和其他因素),並且當使用黑色的ListView提示顏色時,通常會建議使用黑色來產生一些非常糟糕的副作用列表滾動。
任何人都可以建議一個可靠的方法,將漸變邊緣的顏色改變爲任意顏色嗎?
我有一個派生自Android的默認燈光主題的主題。我的ListViews被配置爲白色背景,我認爲這是一個副作用,漸變邊緣的顏色是白色的,這不是我想要的 - 我希望它們是黑色的。控制ListViews中的衰落邊緣的顏色
簡單地改變邊緣的顏色似乎是不可能的(儘管我可以控制長度和其他因素),並且當使用黑色的ListView提示顏色時,通常會建議使用黑色來產生一些非常糟糕的副作用列表滾動。
任何人都可以建議一個可靠的方法,將漸變邊緣的顏色改變爲任意顏色嗎?
不幸的是,你不能輕鬆做到這一點。衰落邊緣的全部點是淡入背景,而不是畫出一些隨機的顏色。但是,您可以嘗試擴展ListView並覆蓋getSolidColor()以返回所需的漸變邊緣顏色。它應該工作得很好。
這實際上要容易得多。
您可以使用'android:cacheColorHint'設置將淡入淡出的顏色更改爲任何想要的顏色。
如:
<ListView
....
android:cacheColorHint="#FFFFFF"
/>
我的設置是透明的,其結果是邊緣不會消失。你可以繞過嗎? – 2012-11-06 15:11:55
我張貼了這個問題的完整的解決方案在擴展的ListView類。這裏:Is it possible to change the colour of the FadingEdge of a 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>
如果你指的是「邊緣發光/效應」,我發現了一個很簡單的(但hackish的)的方式來做到這一點(改變輝光的顏色):
int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", "drawable", "android");
Drawable androidGlow = context.getResources().getDrawable(glowDrawableId);
androidGlow.setColorFilter(brandColor, PorterDuff.Mode.MULTIPLY);
我注意到一個事實,即發光效果實際上是一個可繪製的優勢(與在那個un-mutate),並在其上應用一個過濾器。 更多一點,在這裏:http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/
你可以改變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) {
}
}
我有這個工作,但作爲方法顧名思義,信號衰減區域內並沒有你把顏色的alpha迴應 – 2012-11-26 11:02:57