2010-10-16 10 views
10

मैं सोच रहा हूं कि कैनवास की सीमा सीमा है या नहीं।एंड्रॉइड कैनवास ड्राइंग के बारे में दक्षता

मेरा मतलब है कि अगर मैं drawline(), drawbitmap(), drawcircle(), जैसे फ़ंक्शंस का उपयोग करता हूं तो एंड्रॉइड वास्तव में कैनवास पर कुछ खींचता है और कुछ CPU चक्रों को बर्बाद करता है ??

क्योंकि सभी ड्राइंग फ़ंक्शंस के बाद, स्क्रीन पर वास्तविक चित्र प्रिंट स्क्रीन आकार से का निर्णय लिया जाता है। और अगर मैं स्क्रीन आकार से बाहर कुछ खींचता हूं, तो यह दिखाई नहीं देता है।

मैं अपने ड्राइंग कार्यों को कॉल करके और मेरी सतह "ब्लिंग ब्लिंग" बनाकर अपने कैनवास पर कुछ छोटा विवरण देना चाहता हूं। यदि यह बाध्य नहीं है तो मैं उनका उपयोग नहीं करना चाहता, अगर वे मेरी ड्राइंग धीमा कर देते हैं।

मैं सतही दृश्य की संरचना द्वारा एक छोटे से गेम पर काम कर रहा हूं, किसी भी सलाह के लिए धन्यवाद।

उदाहरण के लिए

: -> ख स्क्रीन बाहर

मैं एक रोबोट एक < से चलने की है।

कैनवास पर रोबोट चलने वाली तस्वीर खींचने में 20 ड्राइंग फ़ंक्शन लगते हैं। यदि मैं स्क्रीन स्क्रॉल करता हूं, तो मैं रोबोट देख सकता हूं।

तो यदि स्क्रीन के बाहर ड्राइंग फ़ंक्शन वास्तव में स्क्रीन पर ड्रॉ के रूप में अधिक समय लेता है। मुझे यह पता लगाना होगा कि केवल उपयोगकर्ता द्वारा रोबोट की स्थिति देखी जा सकती है, तो मैं आकर्षित करता हूं। अन्यथा, मैं नहीं करता हूं।

यदि ड्राइंग फ़ंक्शन अधिक CPU चक्र बर्बाद नहीं करता है, तो मैं वर्तमान स्क्रीन को रोबोट नहीं देख सकता, भले ही मैं हर बार आकर्षित कर सकूं।

उत्तर

5

आपके कैनवास को आपके बिटमैप (2 डी), या ओपनजीएल (3 डी, जिसका मुझे कोई अनुभव नहीं है) का समर्थन है। आपके कैनवास पर सभी ड्राइंग क्लिपिंग आयताकार पर फिसल जाते हैं, जिसे आप बढ़ सकते हैं, सिकुड़ सकते हैं, नए आयताकारों या पथों के साथ छेड़छाड़ कर सकते हैं। इसलिए, आप वास्तव में अपने कैनवास में आने से पहले अपने क्लिपिंग आयतों को प्रबंधित करना चाहते हैं, खासकर यदि इसका समर्थन है एक बड़ा बिटमैप। यदि आप किसी ऐसे क्षेत्र में क्लिप करते हैं जो स्क्रीन आकार के बराबर है तो आप CPU चक्रों को सहेज लेंगे। यदि आपका गेम स्क्रोलर प्रकार का गेम है, तो आप स्क्रीन पर आने वाले क्षेत्र को अपडेट करने के लिए कभी-कभी स्क्रीन स्क्रीन के आकार से बड़े क्षेत्र में क्लिप कर सकते हैं और चारों ओर पैन कर सकते हैं। यदि आपके गेम में सभी दिशाओं में अनंत स्क्रॉलिंग है तो आप अपने छोटे केंद्रीय कैनवास के चारों ओर कई छोटे कैनवास प्राप्त कर सकते हैं, और अपने स्क्रॉलिंग गेम के निर्देशों के आधार पर उन्हें बाएं से दाएं, ऊपर से नीचे फ़्लिप करना चाहते हैं । एक कैनवास के साथ एक बड़ा बिटमैप एक छोटे से डिवाइस के लिए स्मृति पदचिह्न का बहुत बड़ा हो सकता है।

13

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

एक विषय का उपयोग जैसे:

<style name="Theme.NoBackground" parent="android:Theme"> 
     <item name="android:windowBackground">@null</item> 
    </style> 
</resources> 

रोमेन लड़का http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

+0

पर इस घटना का एक बड़ा विवरण नहीं है यदि आप ऐसा करते हैं कैसे अगर वहाँ विशुद्ध रूप से एक कस्टम आकर्षण है (कोई xml फ़ाइल संलग्न यानी) ? –

+1

यह बहुत ही बढ़िया था, इसलिए एक बड़ा सुधार – pt123

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