2012-06-01 29 views
11

पिछले कुछ महीनों के दौरान, मैंने अपने एंड्रॉइड गेम में आसानी से चिकनी एनिमेशन और संक्रमण जोड़ने में सक्षम होने के लिए जावा (Universal Tween Engine) में एक ओपन-सोर्स ट्विनिंग इंजन बनाया। यह गेम के लिए हवा की तरह काम करता है और सफलतापूर्वक कई लोगों द्वारा उपयोग किया जाता है (ज्यादातर LibGDX समुदाय में)। लाइब्रेरी सामान्य है और किसी भी चीज को एनिमेट करने के लिए इस्तेमाल किया जा सकता है (स्विंग यूआई घटकों, ओपनजीएल गेम ऑब्जेक्ट्स इत्यादि)। अब, मैं एंड्रॉइड यूआई को समर्पित lib में एक एडन बनाना चाहता हूं, क्योंकि मेरा मानना ​​है कि यह अंतर्निहित एनीमेशन फ्रेमवर्क की तुलना में बहुत ही जटिल एनिमेशन के निर्माण को बहुत आसानी से कम कर सकता है।एंड्रॉइड एनिमेशन कैसे हुड के नीचे काम करते हैं?

मेरा lib .update(float deltaTime) विधि का खुलासा करता है जिसे हर बार आप सभी चल रहे एनिमेशन को अपडेट करना चाहते हैं। यह गेम के लिए बनाया गया था क्योंकि प्रत्येक गेम एक अनंत लूप का खुलासा करता है, लेकिन यह यूआई के मामले में नहीं है।

इसलिए, मैं सोच रहा था कि एंड्रॉइड एपीआई का एनीमेशन ढांचा हुड के नीचे कैसे काम करता है। क्या एनीमेशन के लिए समर्पित एक स्थैतिक धागा है जो निरंतर चलता है और एनीमेशन फ्रेम-दर-फ्रेम अपडेट करता है और तब तक रुक जाता है जब तक कोई नई एनीमेशन नहीं चलती है?

मैं that जैसे कुछ के बारे में सोच रहा था, लेकिन मैं इस कोड से वास्तव में खुश नहीं हूं क्योंकि यह डिवाइस रीफ्रेश दर को उदाहरण में खाते में नहीं लेता है।

+1

अच्छे लिंक के लिए +1, महान पुस्तकालय। – Orlymee

उत्तर

3

शुरू करने के लिए एक अच्छी जगह यह देखने के लिए है कि एंड्रॉइड व्यू सिस्टम इसे कैसे लागू करता है। खुले स्रोत की खुशी।

जब आप किसी दृश्य पर .animate() को कॉल करते हैं, तो आप एक ViewPropertyAnimator वापस प्राप्त करते हैं, जो प्रारंभएनीमेशन() पर ValueAnimator प्रारंभ होता है।

वैल्यूएनिमीटर में एक हैंडलर है जो लूप चलाता है।

https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/view/ViewPropertyAnimator.java

https://github.com/CyanogenMod/android_frameworks_base/blob/ics/core/java/android/animation/ValueAnimator.java

+1

लिंक के लिए धन्यवाद। ऐसा लगता है कि एनिमेशन एक अलग थ्रेड का उपयोग नहीं करते हैं, लेकिन वर्तमान थ्रेड संदेश कतार पर केवल एक समर्पित हैंडलर। मुझे यकीन नहीं है कि मैं इसके पीछे की रणनीति को समझता हूं, इससे थैले में आने वाले संदेश होने पर एनिमेटिंग होने पर अंतराल और स्टटर हो सकते हैं ... –

+0

अब मुझे याद है, मैंने कुछ समय पहले कुछ कहा था कि एंड्रॉइड ने एनिमेशन को अलग-अलग किया है आईओएस से उत्तरार्द्ध अधिकतम प्राथमिकता वाले समर्पित धागे का उपयोग करता है। यह डेटा प्रोसेसिंग और यूआई उत्तरदायित्व की कीमत पर बहुत चिकनी एनिमेशन की ओर जाता है। मुझे यकीन नहीं है कि मैं आईओएस रास्ता पसंद नहीं करता ... –

+0

मैं एंड्रॉइड यूआई के लिए टिव इंजन के साथ समर्पित प्राथमिकता/कतार को अधिकतम प्राथमिकता के साथ लागू करने का प्रयास करूंगा। हम देखेंगे कि यह आंखों की खुशी के लिए अधिक उपयुक्त है या नहीं। इससे Google को प्रमाण-अवधारणा भी मिल सकती है कि वे गलत हो सकते हैं। –