मेरे पास एक कस्टम व्यू है जिसे मैंने ऑब्जेक्ट आवंटन नहीं करना शुरू किया और मेरे सभी पेंट आवंटन को एक अलग तरीके से ठीक कर दिया।ऑन ड्रा() (स्टेटिकलाउट) में ऑब्जेक्ट आवंटन से बचें?
मुझे कुछ टेक्स्ट के लिए एक स्टेटिकलाइट का उपयोग करने की आवश्यकता है, जिसमें कुछ स्पैन करने योग्य 'सामान' लागू होते हैं।
layoutBpm = new StaticLayout(bpmValue,
textPaintBPM, arcRadius, Layout.Alignment.ALIGN_NORMAL, 0, 1,
false);
layoutBpm.draw(canvas);
यह मुझे समझने के लिए समझ में आया कि मुझे इस पर से बचने के लिए चेतावनी दी जा रही है। मेरे लिए यह महत्वपूर्ण है कि मैं किसी भी प्रदर्शन के मुद्दों से बचने के लिए जो कुछ भी कर सकता हूं, इसलिए मैं इसे ठीक से करने की कोशिश कर रहा हूं।
मुझे ऐसा कोई प्रलेखन नहीं मिल रहा है जिसे मैं समझ सकता हूं जो बताता है कि स्टेटिकलायआउट के कुछ पैरामीटर वास्तव में क्या करते हैं (फ्लोट स्पेसिंगमल्ट? फ्लोट स्पेसिंगड?), लेकिन तीसरा वाला मुझे लगता है कि स्टेटिकलाउट टेक्स्ट के लिए अधिकतम चौड़ाई है जो मैं केवल मापन से प्राप्त कर सकता हूं क्योंकि यह मेरे कैनवास आकार से संबंधित है। यह मुझे असाइनमेंट ऑन मेजर या ऑन ड्रा में रखना चाहता है, जिसमें से ऐसा लगता है कि मुझे ऐसा करने का मतलब है। क्या StaticLayout असाइनमेंट को ड्रॉ में रखना ठीक है या ऐसा करने का कोई बेहतर तरीका है?
आशा है कि यह समझ में आता है, मैं इसके लिए बहुत नया हूं। हर प्रकार की सहायता के लिए आपका धन्यवाद।
(संपादित करें: मैं एक विधि में इस असाइनमेंट डालने और OnDraw/onMeasure से फोन कर यह मानें कि सिर्फ मूर्ख किया जा रहा है और मुझे चेतावनी ग्रहण बंद हो जाएगा लेकिन अभ्यस्त वास्तव में मदद)
धन्यवाद, इसने मुझे चीजों को देखने के लिए थोड़ा नया रास्ता दिया। उपरोक्त को लागू करने वाला एकमात्र मुद्दा यह है कि 'टेक्स्टपेंट' पहले से ही कॉल किया जा रहा है (टेक्स्ट को कैनवास आकार के अनुसार स्केल किया गया है) पर निर्भर करता है और इसलिए 'टेक्स्टविड्थ' भी होता है (जो यह निर्धारित करता है कि टेक्स्ट कब लपेट जाएगा), इसलिए मैं पहले देखने के लिए निर्माता में 'createLayout() 'नहीं कर सकता। मैं इसे 'ऑनमेजर()' में डाल सकता हूं जिसे मैं समझता हूं अक्सर इतनी बार नहीं कहा जाता है? – Anthony
पाठ वास्तव में बहुत कम बदलता है, जिस दृश्य पर मैं काम कर रहा हूं वह वास्तव में एक गोलाकार सेकबार है जिसे मैंने बनाया है और स्टेटिकलाउट का उपयोग बीच में पाठ के लिए किया जाता है जो सेकरबार की प्रगति से संबंधित है। जैसे कि जब आप सर्कल के चारों ओर अपनी अंगुली खींचते हैं तो मूल्य लगातार बदल जाता है। मैंने सोचा कि हालांकि मूल्य बहुत बदलता है, लंबाई हमेशा तीन अंकों तक गद्देदार होती है, इसलिए लेआउट को आकार में समायोजित करने की आवश्यकता नहीं होती है और इसलिए स्टेटिकलाइट ठीक रहेगा। मुझे स्टेटिक/डायनामिक लेआउट पर बहुत कम दस्तावेज मिल सकता है, इसलिए मुझे यकीन नहीं है कि यह सही है या नहीं। किसी भी मदद की सराहना की। – Anthony
तो आखिर में (मुझे लगता है), मैंने 'ऑनमेज चेंज()' के साथ 'ऑनमेज() 'को बदल दिया है क्योंकि मेरी लेआउट आवश्यकताएं सरल हैं और शुरुआती कॉल को' createMayout()' के बजाय 'createLayout() 'में डाल रही हैं। लिंट कुछ कारणों से 'ऑनसाइज चेंज()' में ऑब्जेक्ट आवंटन को ध्यान में रखता नहीं है लेकिन इसे 'मेजर() 'में नापसंद करता है। मैं कल्पना करता हूं कि इन दोनों विधियों को एक ही बार कहा जाता है, इसलिए कोई विचार नहीं कि यह एक में क्यों अच्छा है, न कि दूसरे, लेकिन जो भी हो, ठीक है। मेरी मुख्य चिंता 'ऑन ड्रा()' से आवंटित हो रही थी जो मैंने किया है। एक बार फिर धन्यवाद। – Anthony