9

कुछ दृश्यों के लिए पृष्ठभूमि सेट करने का सबसे अच्छा तरीका क्या है? उदाहरण के लिए backround के 2 वेरिएंट:बेहतर प्रदर्शन, नौ-पैच या ड्रॉबल एक्सएमएल संसाधन के लिए मुझे क्या उपयोग करना चाहिए?

  1. ढाल के साथ पृष्ठभूमि, कोनों और सीमा सिर्फ एक रंग के साथ
  2. पृष्ठभूमि गोल और कोनों

गोल तो वेरिएंट की जो बेहतर होगा, नौ पैच या ड्रॉबल एक्सएमएल संसाधन?

+1

मैं जानता हूँ कि dont't के ज्यादा नहीं है! :) लेकिन चूंकि मानक एंड्रॉइड थीम 9पैच का उपयोग करते हैं, इसलिए मुझे लगता है कि ऐसा करना बहुत गलत नहीं हो सकता है। – pumpkee

+0

मुझे लगता है कि अगर मुझे केवल एक रंग की पृष्ठभूमि की आवश्यकता है, तो शायद एक्सएमएल रिसोर्स तेज होगा? कम से कम xml फ़ाइल छोटे आकार – cooperok

+0

होगी यदि आपको केवल एक रंग की आवश्यकता है, इसके साथ पृष्ठभूमि सेट करें। कोई ज़रूरत नहीं है छवि संसाधन, xml config – MengMeng

उत्तर

14

मेरा अनुमान है, NinePatch ज्यादातर मामलों में थोड़ा तेज होगा। मुझे जो मिला वह यहां है।

GradientDrawable (एक्सएमएल में rects के लिए इस्तेमाल एक) this code का उपयोग करता Canvas जो बारी में देशी कॉल SkCanvas, SkDraw और अंततः SkScan और SkBlitter के लिए अग्रणी का उपयोग करता है के माध्यम से कॉल करने के लिए।

दूसरी ओर, देशी call to NinePatch.cpp से पहले shortly calls NinePatchImpl.cpp -- NinePatch_draw() --- और वह जादू है। कोड को चिह्नित क्षेत्रों में फिर से चलाया जाता है और बाद में कई कॉलों के बाद SkDraw (drawPath() के बजाय केवल drawRect()) में वही तर्क का उपयोग करके सामान खींचता है, लेकिन अंत में यह वही SkScan और SkBlitter काम करता है।

यह कोड तुरंत मेरे सिर को लपेटने के लिए बहुत मुश्किल है, लेकिन मेरी आंखों को पकड़ने के लिए यह है कि GradientDrawable पूरे देशी ढेर में दो कॉल करता है यदि उसके पास पृष्ठभूमि और स्ट्रोक (look here) दोनों हैं, जबकि किसी भी परिदृश्य में NinePatch केवल एक बनाता है।

तो, वास्तव में दोनों तरीकों के लिए बार को मापने के बिना मैं ज्यादातर मामलों NinePatch में एक लग रहा है जीतता दौड़ मिलती है: अगर हम [बहुत] मोटे तौर पर मान लेते हैं कि drawRect() और drawPath() उपयोग के लिए देशी कॉल के ढेर काफी एक ही तर्क और [एक और भयानक सरलीकरण] पैरामीटर सेट जो आसपास के पारित हो जाते हैं और NinePatch और GradientDrawable द्वारा बनाए गए तरीकों की जटिलता को प्रभावित नहीं करते हैं, तो NinePatch भरने और रूपरेखा के साथ GradientDrawable से लगभग 2 गुना तेज हो जाता है। खैर, बशर्ते आप एक नियमित, 9-सेक्शन 9-पैच का उपयोग करें (यानी आप 9-पैच को बहुत भयानक मार्करों से नहीं फेंकते हैं, जिससे टुकड़ों पर अत्यधिक प्रयास-महंगे होते हैं)।

कोई भी जो इस पर ठोकर खाएगा और विषय पर अधिक जानता है (और/या देशी कोड की जटिलता का अनुमान लगाने में बेहतर), कृपया, अगर मैं गलत हूं तो मुझे सही करें।

पी एस हाँ, मैं जानता हूँ कि यह एक सीधा जवाब

+0

ग्रेट जॉब, आपके उत्तर के लिए धन्यवाद। यह लगभग वही है जो मैं सुनना चाहता था।आपने स्रोत में गहराई से देखने के लिए मुझे एक अच्छा उदाहरण दिखाया :) – cooperok

+0

असल में, मैं अभी जवाब संपादित कर रहा हूं, पता चला कि मैंने कुछ सामानों को नजरअंदाज कर दिया है, इसलिए मैं कुछ तर्क हटा रहा हूं :) लेकिन परिणाम यह है कि परिणाम वही - 'नौपैच' जीत। –

+3

+1। सरल शब्दों में: तैयार किए गए पिक्सेल डेटा बनाम अतिरिक्त CPU चक्रों के साथ प्रक्रियात्मक रूप से जेनरेट किया गया। यह सामान्य कंप्यूटर ग्राफिक्स में भी सच है। –

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

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