2012-10-22 17 views
5

मैं कुछ अनुप्रयोगों के आधार के रूप में एक छोटी पुस्तकालय विकसित कर रहा हूं। जैसा कि मैंने के बारे में scenegraph (2 डी) बनाने के लिए मैं सोच रहा हूँ जो निम्न तरीकों में से, प्रदर्शन, रख-रखाव के मद्देनजर तहत अधिक आशाजनक का उपयोग करने के लिए आसान लग रहा है कर रहा हूँ आदिकैनवास मैनिपुलेशन बनाम तत्व मैनिपुलेशन

  1. मैं हर drawable तत्व एक मैट्रिक्स जहां दे सकता है मैं अनुवाद, रोटेशन और अधिक प्रदर्शन करता हूं।
  2. मैं तत्वों के बजाय कैनवास पर सब कुछ कर सकता था।

पहला समाधान एक नुकसान हैं:

private float get(int index) { 
    final float[] values = new float[9]; 
    getValues(values); 
    return values[index]; 
} 

public float getX() { 
    return get(Matrix.MTRANS_X); 
} 

public float getY() { 
    return get(Matrix.MTRANS_Y); 
} 
: हलकों, जहां मैं ड्रा कॉल में एक मैट्रिक्स पारित नहीं हो सकता की तरह आदिम तत्व के लिए, मैं इस तरह मैट्रिक्स से अनुवादित मूल्यों में प्रवेश करना होगा

तो प्रत्येक ड्रॉ कॉल पर मैं प्रत्येक गेटर कॉल के लिए एक फ्लोट सरणी बनाता हूं (get get() के लिए एक, getY() के लिए एक)। यह मानते हुए कि मेरे पास स्क्रीन पर बहुत से तत्व हैं, इससे स्मृति और प्रदर्शन प्रभाव हो सकता है।

दूसरे दृष्टिकोण में "नकारात्मक" सोच का नुकसान है। अगर मैं 100/100 बिंदु पर एक तत्व तैयार करना चाहता हूं तो मुझे कैनवास को -100/-100 में अनुवाद करना होगा क्योंकि मैं 0/0 पर आकर्षित करता हूं। यदि मैं उसके बाद कैनवास को पुनर्स्थापित करता हूं, तो परिणाम वांछित 100/100 पर खींचा जाएगा। मुझे यकीन नहीं है कि क्या इस नकारात्मक सोच के परिणामस्वरूप कोड रखरखाव पर भारी असर पड़ेगा और समझ में कमी आएगी (कभी भी किसी चीज़ को अस्वीकार करने से भूलकर बग शुरू करने के बारे में सोचना शुरू नहीं हुआ ...)।

क्या किसी के पास कोई सुझाव है जिसे किस तरह से प्राथमिकता दी जानी चाहिए?

उत्तर

2

ऐसा लगता है कि वास्तव में दोनों समाधान संयुक्त किया जाना चाहिए करने के लिए एक बढ़िया तरीका नहीं है।

दूसरे दृष्टिकोण पर मेरी धारणा पूरी तरह से गलत है। यदि मैं तत्व को 100/100 तक अनुवाद करता हूं, तो मूल बिंदु को 100/100 में बदल दिया जाएगा। वैसे भी, कैनवास के लिए लागू होता है। नकारात्मक सोच मेरे बारे में कुल बकवास था।

  1. प्रत्येक तत्व तैयार किया जाएगा कि, अपने ही मैट्रिक्स जो रोटेशन, अनुवाद और पैमाने होते हैं:

    संयुक्त परिणाम निम्न हो जाएगा।

  2. कैनवास save() के माध्यम से सहेजा जाएगा, प्रदान की गई विधि concat(Matrix matrix) तत्व के मैट्रिक्स को लागू किया जा सकता है। ड्राइंग किया जाएगा और कैनवास restore() के साथ बहाल किया जाएगा।
  3. प्रत्येक ड्रॉबल एलिमेंट जो अन्य ड्रॉबल्स के माता-पिता हैं, बच्चों पर लूप करेंगे और उसी तरह से सहेजेंगे, कंसल्ट और पुनर्स्थापित करेंगे।

यह किसी भी बड़े कार्यान्वयन कार्य के बिना 2 डी दृश्य ग्राफ के कार्यान्वयन को सक्षम बनाता है।

1

प्रदर्शन कारणों से, आंतरिक मैट्रिक्स विधि का उपयोग करना संभवतः तेज़ है क्योंकि यह पुस्तकालयों को स्वचालित रूप से हार्डवेयर-त्वरित होने की अनुमति देता है, यदि आप यही कर रहे हैं। फिर फिर, मुझे पूरी तरह से यकीन नहीं है कि यह हार्डवेयर तेज हो जाएगा।

# 2 मजेदार तरीका है। यह निश्चित रूप से लंबे समय तक आपको अधिक शक्ति और लचीलापन देगा। इसके अलावा, आप दोनों को गठबंधन करने में सक्षम हो सकते हैं।

वहां # 3 भी है: जब आप खींचने योग्य तत्व कहते हैं, और यदि आप एंड्रॉइड ड्रायबल्स का उपयोग कर रहे हैं, तो आप कस्टम ड्रायरेबल क्लास बना सकते हैं।

मुझे नहीं लगता कि इस

+1

मैंने अपना शोध परिणाम पोस्ट किया। मैं वास्तव में आपके उत्तर से कुछ भी नया नहीं प्राप्त कर सका लेकिन मैं आपके प्रयास के लिए आपको उकसाता हूं। – WarrenFaith

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