2011-06-28 13 views
10

डिफ़ॉल्ट चयनकर्ता के साथ, एक सूची आइटम को लंबे समय से दबाने से इसकी पृष्ठभूमि दो रंगों के बीच संक्रमण हो जाती है।एंड्रॉइड: सूची आइटम को लंबे समय तक दबाते समय चमक प्रभाव कैसे प्राप्त करें?

नीचे दिए गए चयनकर्ता को प्रतिस्थापित करने से प्रभाव को हटा दिया जाता है। this question के अनुसार, मुझे इसे पुन: पेश करने के लिए एक एनीमेशन की आवश्यकता है। मैं xml में ऐसा करने के बारे में कैसे जाउंगा?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_window_focused="false" android:drawable="@android:color/transparent" /> 
     <!-- 
       Even though these two point to the same resource, have two states so 
       the drawable will invalidate itself when coming out of pressed state. 
     --> 
     <item android:state_focused="true" android:state_enabled="false" 
       android:state_pressed="true"  android:drawable="@drawable/list_selector_background_disabled" /> 
     <item android:state_focused="true" android:state_enabled="false" 
       android:drawable="@drawable/list_selector_background_disabled" /> 
     <item android:state_focused="true" android:state_pressed="true" 
       android:drawable="@drawable/list_selector_background_transition" /> 
     <item android:state_focused="false" android:state_pressed="true" 
       android:drawable="@drawable/list_selector_background_transition" /> 
     <item android:state_focused="true" 
       android:drawable="@+drawable/list_selector_background_focus" /> 
</selector> 

मिले on the web:

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_pressed="true"> 
     <shape> 
      <solid 
       android:color="@color/state_pressed" /> 
     </shape> 
    </item> 
    <item 
     android:state_focused="true"> 
     <shape> 
      <solid 
       android:color="@color/state_focused" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <solid 
       android:color="@color/state_idle_grey" /> 
     </shape> 
    </item> 
</selector> 

उत्तर

9

यहाँ list_selector_background से कोड है।

और यह लंबे समय तक प्रेस क्लिक के लिए इस संक्रमण का उपयोग करता है:

<transition xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/list_selector_background_pressed" /> 
    <item android:drawable="@drawable/list_selector_background_longpress" /> 
</transition> 

मिले on the web too

इसके लिए कोई एनीमेशन नहीं है। और आपको एक ही क्रम में राज्यों को रखना याद रखें, या कम से कम इसके बारे में सोचें यदि आप उन्हें स्वैप करते हैं, तो आदेश महत्वपूर्ण है।

व्यक्तिगत रूप से, मुझे पसंद है जब चीजें मानक तरीके से व्यवहार करती हैं, इसलिए मैं मानक सूची चयनकर्ता को बस दूंगा।

सादर, स्टीफन

+0

धन्यवाद, कि उत्कृष्ट है। –

+2

कोई और विचार क्यों नहीं है? मैंने आपके द्वारा किए गए संक्रमण को लागू किया है, तो आप का मतलब है कि "list_selector_background_transition.xml" फ़ाइल के लिए हम आपके द्वारा कोड के दूसरे ब्लॉक में दिए गए संक्रमण को जोड़ते हैं? मैंने यह बिल्कुल किया लेकिन केवल एक रंग का पीछा किया गया है जो केवल "list_selector_background_pressed" लागू होता है – coderVishal

+0

@coderVishal क्या आप 'RecyclerView' का उपयोग करते हैं? ** यह समाधान केवल तभी काम करता है जब आप 'AbsListView' ** (उदाहरण के लिए, ListView) के उप-वर्ग का उपयोग करते हैं। यह जांचता है कि क्या आइटम पृष्ठभूमि में 'ट्रांज़िशन ड्रॉबल' है और एनीमेशन शुरू होता है। दुर्भाग्य से यह 'रीसाइक्लिंग व्यू' के मामले में नहीं है, आपको एनीमेशन शुरू करने के लिए कुछ तंत्र का आविष्कार करना होगा। – Malcolm

संबंधित मुद्दे