2010-03-05 15 views
29

के लिए एनीमेशन विस्तार योग्य लिस्ट व्यू के लिए एक विस्तार या पतन एनीमेशन लागू करना संभव है?विस्तार योग्य लिस्ट व्यू

+0

मुझे नहीं लगता कि पंक्तियों के एनिमेट के बीच अंतर बनाना संभव है, हालांकि मैंने बच्चे के रूप में दिखाए गए दृश्य पर स्लाइड बाएं/दाएं एनीमेशन डाला है। यह केवल वास्तव में काम करता है क्योंकि केवल एक ही बच्चा है। – skorulis

उत्तर

10

यह एक साधारण सूची दृश्य का उपयोग करके किया जा सकता है जिसमें प्रारंभिक रूप से छुपा दृश्य और एक कस्टम क्लास है जो एनीमेशन बढ़ाती है। मूल विचार View.GONE से शुरू करना है, फिर View.VISIBLE पर दृश्यता सेट करते समय धीरे-धीरे मार्जिन को ऋणात्मक मान से आवश्यक आकार में फिर से आकार दें।

देखें:

..और अंत में

अंतिम उदाहरण में आपको आवश्यक सभी कोड शामिल हैं। यह मेरे लिए थोड़ा सा हैक, विशेष रूप से तथ्य यह है कि आपको शुरुआत में view.bottomMargin = -50 या उससे अधिक सेट करना होगा, अन्यथा एनीमेशन पहली बार ठीक से काम नहीं करता है, लेकिन अब तक मुझे कोई व्यवहार्य विकल्प नहीं मिला है (स्क्रॉलव्यू का उपयोग स्वयं के साथ ListView के बजाय कंटेनर आइटम)।

और अंत में, इस एप्लिकेशन को सूत्रों के लिंक के साथ अन्य उपयोगी उदाहरण के बहुत सारे के बीच में, ऊपर के उदाहरण में शामिल हैं:

अपडेट: Google बौद्धिक के लिए कथित तौर पर प्ले स्टोर से ऐप्स को निकाल दिया संपत्ति उल्लंघन (हालांकि इसमें केवल स्रोतों को खोलने के लिए डेमो और लिंक शामिल हैं), लेखक ने अब http://goo.gl/ihcgs से सीधे डाउनलोड के लिए एपीके उपलब्ध कराया है अधिक जानकारी के लिए https://plus.google.com/108176685096570584154/posts देखें। एनबी: मैं लेखक से संबद्ध नहीं हूँ।

+0

यूई पैटर्न ऐप लिंक के लिए धन्यवाद। – howettl

+0

लेकिन यह सूची दृश्य का उपयोग करने का पूरा बिंदु खो देगा, क्योंकि समूह के अंदर मौजूद सभी आइटम (जो आप विस्तार करते हैं) को इसके अंदर होना चाहिए। यदि आपके पास बहुत सारी चीज़ें हैं, तो आपको वहां भी बहुत सारे विचारों की आवश्यकता होगी ... –

+0

@android डेवलपर: आप स्क्रॉलव्यू का उपयोग करके बेहतर हो सकते हैं, इसे दृश्यों के साथ पॉप्युलेट कर सकते हैं और उन्हें एनिमेशन लागू कर सकते हैं की आवश्यकता है। एक ListView एक जटिल घटक है जो बड़ी सूचियों के लिए अनुकूलित किया गया है; यदि आपके पास केवल एक दर्जन आइटम हैं तो एक स्क्रॉल व्यू एनिमेट करना आसान हो सकता है - अपना स्वयं का ब्लॉक घटक बनाएं और अपनी इच्छानुसार विचारों को एनिमेट करें। ListView की तुलना में मुख्य नुकसान यह है कि एंड्रॉइड आपके आइटम को बना/नष्ट नहीं करेगा क्योंकि वे दृश्य क्षेत्र में स्क्रॉल किए गए हैं और कंटेनर का पुन: उपयोग नहीं किया जाएगा, लेकिन यदि आपके पास कुछ आइटम हैं तो यह एक बड़ा सौदा नहीं है । – ccpizza

1

मैंने एक साधारण सूची दृश्य के लिए एक समान काम किया है। ऐसा करने के लिए मैंने getView विधि को ओवरराइड किया है और प्रत्येक सूची आइटम पर अनुवाद (या नीचे) एनीमेशन का अनुवाद किया है। अनुवाद की डिग्री सूची की स्थिति द्वारा तय की गई थी आइटम।

+0

https://github.com/idunnololz/AnimatedExpandableListView/ –

1

मुझे इस समस्या के लिए एक संभावित (आंशिक) कामकाज मिला है।

पहले आप ExpnadableListView की पुस्तक राज्य स्टोर करने के लिए की जरूरत है: ListView खुद के लिए

@Override 
public void onScrollStateChanged(final AbsListView view, final int scrollState) { 
    this.mScrollState = scrollState; 
} 

public int getScrollState() { 
    return this.mScrollState; 
} 

, आप, ताकि केवल अपने बच्चों एनिमेटेड हो जाएगी स्टोर करने के लिए जो समूह क्लिक किया गया था की जरूरत है:

mListView.setOnGroupClickListener(... 
@Override 
public boolean onGroupClick(...){ 
mGroupPosition=groupPosition; 

अब, विधि getChildView() में, आप स्क्रॉल के राज्य की जाँच, और अगर यह बेकार है, आप एनीमेशन शुरू करते हैं, उदाहरण के लिए:

public View getChildView(...) { 
// <=prepare rootView and return it later 
if (groupPosition==mGroupPosition&&getScrollState() == OnScrollListener.SCROLL_STATE_IDLE) 
    rootView.setAnimation(...) 

यह समूह के विस्तार के दौरान प्रत्येक बार बच्चे के विचारों के लिए एक एनीमेशन सेट करेगा।

इस की सबसे बड़ी खामी हैं:

    केवल विस्तार बच्चे विचारों के लिए
  1. । समूह को ध्वस्त करते समय आपको उन्हें एनिमेट करने के लिए अतिरिक्त तर्क के बारे में सोचना होगा।
  2. सभी एनिमेशन एक बार में शुरू होते हैं। यदि आप चाहते हैं कि यह अन्यथा काम करेगा तो आपको एक-दूसरे के बाद एक से अधिक एनिमेशन जोड़ना होगा।
+0

यह एक दिलचस्प दृष्टिकोण है। लेकिन जो मैंने सीखा है, उससे बच्चे * आइटम * बच्चे * विचार * नहीं हैं, लेकिन भाई बहन हैं। तो क्या आप अलग-अलग एनिमेशन वाले सभी बच्चों को एनिमेट करते हैं, या आप इसे कैसे करते हैं कामकाजी उदाहरण कोड? – Nilzor

+0

@ नीलोजर मैंने इसे बहुत समय पहले किया है, और मुझे कम समय के कारण एनिमेशन की आवश्यकता को हटा दिया गया था। क्षमा करें। –

+0

कोई समस्या नहीं, मुझे वापस आने के लिए धन्यवाद। वहां किसी और के लिए, समस्या काफी अभी भी अनसुलझा है, हालांकि मुझे लगता है कि यह इस समस्या को हल करने वाला Google होना चाहिए यदि वे सामग्री डिज़ाइन दिशानिर्देशों के बारे में गंभीर हैं – Nilzor

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