2011-01-13 12 views
14

मेरे पास एक थीम है जो एंड्रॉइड की डिफ़ॉल्ट प्रकाश थीम से प्राप्त होती है। मेरी ListViews को एक सफेद पृष्ठभूमि के साथ कॉन्फ़िगर किया गया है, और मुझे लगता है कि इसके दुष्प्रभाव के रूप में, लुप्तप्राय किनारे का रंग सफेद है, जो कुछ नहीं है जो मैं चाहता हूं - मैं उन्हें काला होना चाहता हूं।ListViews में fading किनारे के रंग को नियंत्रित करना

किनारे के रंग को बदलने के लिए असंभव लगता है (हालांकि मैं लंबाई और अन्य कारकों को नियंत्रित कर सकता हूं), और सूचीदृश्य के संकेत रंग परिणामों के लिए काले रंग का उपयोग करने का सामान्य सुझाव कुछ बहुत ही भयानक दुष्प्रभावों में होता है जब सूची स्क्रॉल।

क्या कोई भी लुप्तप्राय किनारे के रंग को मनमाने ढंग से रंग बदलने का विश्वसनीय तरीका सुझा सकता है?

उत्तर

18

दुर्भाग्य से आप इसे आसानी से नहीं कर सकते हैं। लुप्तप्राय किनारों का पूरा बिंदु कुछ यादृच्छिक रंग खींचने के लिए पृष्ठभूमि में फीका नहीं है। हालांकि, आप सूची दृश्य को विस्तारित करने और लुप्तप्राय किनारों के लिए इच्छित रंग को वापस करने के लिए getSolidColor() को ओवरराइड करने का प्रयास कर सकते हैं। यह ठीक काम करना चाहिए।

+0

मैं इस काम किया है, लेकिन जैसा कि नाम से पता चलता विधि, fading क्षेत्र रंग आप में डाल के अल्फा का जवाब नहीं है –

34

यह वास्तव में तब बहुत आसान है।

आप किसी भी चीज़ के लिए फीका का रंग बदल सकते हैं: 'android: cacheColorHint' सेटिंग।

जैसे:

<ListView 
.... 
android:cacheColorHint="#FFFFFF" 
/> 
+0

मेरे पास पारदर्शी होने का सेट है, जिसके परिणामस्वरूप किनारों पर लुप्त नहीं हो रहा है। क्या आप इसे गोल कर सकते हैं? –

+1

पारदर्शी वास्तव में सबसे अधिक समझ में आएगा और आपको लगता है कि वास्तव में डिफ़ॉल्ट होगा लेकिन जिस तरह से इसे लागू किया गया है (जिसमें यह निर्दिष्ट रंग का ओवरले लागू होता है) यह संभव नहीं है। आपकी सबसे अच्छी शर्त या तो एक रंग का उपयोग करना है जो आपकी पृष्ठभूमि जैसा दिखता है या शायद इसे पारदर्शी भी सबसे अच्छा समाधान है। – Scott

+0

नहीं, यह बिना किसी समस्या के पारदर्शी का उपयोग कर रहा है, लेकिन अब मेरे पास कोई लुप्तप्राय किनार नहीं है। –

10

मुझे समस्या थी कि सफेद "ओवरस्क्रॉल" रंग था, वास्तव में लुप्तप्राय किनारे नहीं।

(अन्यथा सेट किसी से बढ़त) fading की आवश्यकता है जब आप समाप्त हो जाती है हिट मानते हुए कि आपने fading बढ़त चाहते हैं, लेकिन नहीं भयंकर सफेद चमक (!) इस प्रयास करें:

<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> 
1

आप "बढ़त मतलब तो चमक/प्रभाव ", मैं यह पूरा करने के एक बहुत ही सरल (लेकिन hackish) जिस तरह से (चमक का रंग बदलने) में पाया गया:

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/

3

आप एक प्रतिबिंब ListView या GridView का उपयोग करने का EdgeEffect रंग बदल सकते हैं। अपने प्रोजेक्ट में निम्न स्थिर कारखाने तरीकों को कॉपी करें और का उपयोग 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) { 
    } 
} 
संबंधित मुद्दे