2013-02-03 59 views
5

बहुत अधिक विस्तार के बिना, मैं ListView में 'स्लाइड टू आर्काइव' सुविधा के समान 'स्लाइड' तत्वों को जीमेल में सक्षम करना चाहता हूं। मैं ऑन टचलिस्टर के साथ ठीक हूं और यह सब मेरा स्लाइड स्लाइड एनीमेशन के बारे में है।एंड्रॉइड - स्लाइड सूची, सेटएड, सेटपैडिंग, या ट्विन एनीमेशन के साथ स्लाइड सूची देखें?

पहले दो चीजें हैं जो मन में आ रहे हैं ..

view.setPadding(slideOffset, 0, 0, 0); 

और ..

view.setX(slideOffset); 

पूर्व बहुत मक्खन, यहां तक ​​कि एमुलेटर पर है।
उत्तरार्द्ध मेरे गैलेक्सी नेक्सस पर थोड़ी जंकी है।

मेरे सवालों का:
* भले ही मैं क्या कोशिश की है की, यह करने के लिए सही तरीका क्या है?
setXsetPadding से कम चिकनी क्यों है?
क्या कोई दृष्टिकोण दूसरे के मुकाबले एंड्रॉइड सर्वोत्तम प्रथाओं के अनुरूप है?
क्या ट्विन्डेड अनुवाद एनिमेशन एक विकल्प हैं? यदि हां, तो क्या आप मुझे सही दिशा में इंगित करने के लिए एक संक्षिप्त उदाहरण प्रदान कर सकते हैं?

संपादित करें:
स्पष्ट है कि, मैं प्रभाव मैं अनुकरण करने के लिए कोशिश कर रहा हूँ की एक छवि संलग्न कर रहा हूँ।

enter image description here

+0

मैं इस पर बक्षीस चलाने के लिए जा रहा हूं। मुझे यकीन नहीं है कि इस समस्या का कोई अच्छा जवाब नहीं है या यदि मैं सिर्फ सही सवाल नहीं पूछ रहा हूं। शायद एक सुरुचिपूर्ण समाधान समय पर खुद को पेश करेगा। –

उत्तर

1

मैं यकीन है कि setX() धीमी वह अपने माता-पिता को प्रभावित करता है क्योंकि है हूँ। एक दृश्य के एक्स को बदलते समय, जब भी आप मूल्य अपडेट करते हैं, तो यह माता-पिता के ऑनआउट/ऑनमेजर को कॉल करता है। ऐसा इसलिए है क्योंकि बच्चे का एक्स मान माता-पिता को अन्य वस्तुओं को स्थानांतरित करने का कारण बन सकता है, क्योंकि माता-पिता को खुद को फिर से तैयार करने की आवश्यकता होती है।

आप व्यू ग्रुप को विस्तारित करके और उन तरीकों पर लॉग पर लिखकर आसानी से इसका परीक्षण कर सकते हैं। फिर, आप दोनों दृष्टिकोण, पैडिंग बनाम सेटएक्स का उपयोग कर सकते हैं, और देखें कि क्या होता है।

क्या आप आइटम को एनिमेट करने का प्रयास कर रहे हैं? या आप चाहते हैं कि उपयोगकर्ता इसे जीमेल पर ले जाए? आप अपने आइटम के "एक्स" मान को संभालने के लिए ऑब्जेक्टएनिमीटर का उपयोग कर सकते हैं। आपके आइटम के लिए "हार्डवेयर परत" के साथ, यह एक आसान अनुभव बनाएगा। आप यहां कैसे करें इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं: http://developer.android.com/guide/topics/graphics/hardware-accel.html

+0

ऐसा लगता है कि ऑनआउट/ऑनमेजर कॉल के बारे में बहुत कुछ समझ में आता है। क्या इसे रोकने के लिए कोई रास्ता होगा या क्या यह बदले में पैडिंग का उपयोग करने का एक कारण होगा? या, सिर्फ एक हैक पैडिंग है? मैं आइटम को उपयोगकर्ता की उंगली का पालन करना पसंद करूंगा, इसलिए कोई एनीमेशन आवश्यक नहीं है। ऑब्जेक्टएनिमीटर उपयुक्त है यदि लक्षित स्थान लगातार बदल रहा है - जैसे स्पर्श स्थान का पालन करना? –

+0

उस मामले में - एनीमेशन सही दृष्टिकोण नहीं है। आप अभी भी आइटम के लिए "हार्डवेयर परत" बनाने का प्रयास कर सकते हैं, जिससे आप इसे स्थानांतरित करने के लिए GPU को आकर्षित करना आसान बना सकते हैं। आपके द्वारा किए जाने के बाद परत को हटाने के लिए मत भूलना। हमें बताएं कि यह कैसा चल रहा है। – Udinic

1

हाँ, यदि आप उच्च एपीआई को लक्षित कर रहे हैं, तो ViewPropertyAnimator शायद एक अच्छा समाधान है। आप कम एपीआई का समर्थन करने के लिए है, तो लागू करने के लिए मेरे विचार प्रक्रिया होगी (और मैं इस अपने आप को व्यक्तिगत रूप से लागू कर दिया है नहीं, लेकिन इस प्रदर्शन के लिए अच्छा होना चाहिए) के लिए:

  1. अपने स्पर्श हैंडलर में, आप एक बार 've निर्धारित किया जाता है कि उपयोगकर्ता "रपट", अदृश्य करने के लिए देखें की दृश्यता सेट, और एक अलग बिटमैप में ड्राइंग कैश की दुकान (बिटमैप bmp = myView.getDrawingCache();)

  2. एक ही स्थान पर कि बिटमैप ड्रा दृश्य के रूप में, और उपयोगकर्ता के स्पर्श बिंदु की एक्स-स्थिति के अनुसार स्थिति को स्थानांतरित करने के लिए कैनवास अनुवाद विधियों का उपयोग करें।

  3. उपयोगकर्ता के जाने के बाद, वापस अनुवाद करें (अधिमानतः एक एनीमेशन के साथ सुचारु रूप से), बिटमैप रीसायकल करें, और दृश्य को वापस विजिबल करें।

+0

मैंने इस टिप्पणी को कुछ दोस्तों को पास कर दिया है, कुछ जो एंड्रॉइड और/या प्रोग्रामिंग के बारे में जानते हैं, और कुछ जो नहीं करते हैं। सभी ने मेरी भावना साझा की कि अगर ऐसा कुछ करने का सही तरीका है, तो यह एंड्रॉइड के लिए अच्छा नहीं लग रहा है। एंड्रॉइड में इस तरह की चीजों को करने का यह सही तरीका है? या यह यह करने के लिए सिर्फ एक हैक है? मुझे आश्चर्य है कि यह एक समाधान के साथ एक अच्छी तरह से प्रलेखित समस्या नहीं है। –

+0

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

1