2010-05-07 7 views
12

मैं अपने MapView पर एक मार्ग आकर्षित करने के लिए कोशिश कर रहा हूँ में बुलाया जा रहा है। मैंने ओवरले बढ़ाया है और ड्रा() विधि लागू की है। मार्ग ठीक से प्रदर्शित होता है, हालांकि डिबगिंग करते समय, मैंने ड्रॉ() पर ब्रेकपॉइंट जोड़ा, और देखा कि इसे लगातार कहा जा रहा है।ड्रा लगातार मेरी एंड्रॉयड मानचित्र ओवरले

मैं केवल इसे फिर से तैयार करना चाहता हूं अगर कोई नक्शा या ज़ूम चलाता है (ड्रॉ मार्ग खींचते समय इन परिवर्तनों को ध्यान में रखता है) इसका कारण क्या हो सकता है?

उत्तर

13

दो ड्रा तरीकों कि अधिरोहित जा सकता है कर रहे हैं।

void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow) 

Desc: मानचित्र पर ओवरले बनाएं।

boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)
Desc: एनिमेटेड ओवरले के लिए कॉल ड्रा करें।

मैं मूल रूप से एक दूसरे के overrided।
पहली विधि में बदलने के बाद, यह काम किया।

2

मुझे लगता है कि ड्रॉ विधि क्योंकि पृष्ठभूमि में किया जा रहा दोबारा बनाई लगातार की बार-बार कहा जाता है। "MapView.ReticleDrawMode" को DRAW_RETICLE_UNDER पर सेट करने का प्रयास करें। यह मूल रूप से ओवरले के तहत रीटिकल खींचने के लिए नक्शा दृश्य को बताता है। इसलिए जब पृष्ठभूमि को याद किया जाता है तो ओवरले की ड्रॉ विधि को नहीं बुलाया जाएगा। यह मेरे लिए मुद्दा तय किया।

अधिक जानकारी के लिए, यहाँ देखो: MapView Api

2

मैं फिसल गया जब मुझे नहीं पता था कि ड्रा विधि मिलता है न केवल किसी भी मार्कर है कि आप आकर्षित कहा जाता है, लेकिन यह भी उन मार्करों की छाया। तो एक उदाहरण के रूप में, यदि आपके पास दो मार्कर हैं और आपके पास छायाएं सत्य हैं (जो डिफ़ॉल्ट सेटिंग है), तो आपके पास ड्रॉ विधि को 4 बार कहा जाएगा (एक बार प्रत्येक मार्कर के लिए, मार्करों की प्रत्येक छाया के लिए)!

-1

आप बस अपनी ItemizedOverlay वर्ग को यह जोड़ सकते हैं:

@Override public void draw(Canvas c, MapView m, boolean shadow) { super.draw(c, m, false);} 

यह आपके MapView ओवरले से छाया निकाल देंगे।

1

मेरे लिए यह एक अजीब बग की तरह दिखता है - कभी कभी ड्रा विधि लगातार कहा जाता है, कभी कभी नहीं।

here देखते हैं।

2

आगे की समीक्षा के बाद, ओवरले ड्रा() वास्तव में दस्तावेज़ में वर्णित अनुसार काम करता है। छाया = सत्य के लिए एक ड्रॉ, और छाया = झूठी के लिए एक।

दिलचस्प बात यह है कि विशिष्ट ओवरले ड्रा() विधि MapView में खींचे गए प्रत्येक तत्व के लिए विज्ञापित के रूप में प्रतिक्रिया देती है। उदाहरण के लिए, मेरे मामले में, ऐसा लगता है कि प्रत्येक Google मानचित्र, मानचित्र पर खींचा गया Google लोगो, और फिर विशेष ओवरले मैंने खुद को खींचा है। स्पष्ट रूप से प्रत्येक के लिए दो बार (छाया सच | झूठी)।

यह शायद नक्शे प्रस्तुत करने का इच्छित तरीका है। मुझे इस जानकारी के लिए पर्याप्त समय नहीं मिला है या नहीं मिला है।

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

1

मेरे ऐप में, मेरे पास मानचित्र के लिए नेटवर्क डेटा लोड होने पर एक अनिश्चित प्रगति पट्टी (जैसे कताई सर्कल) दिखाती है। जब नेटवर्क डेटा लोड हो रहा है, तो मैं प्रगति पट्टी की अदृश्यता को अदृश्य में स्थापित कर रहा था। हालांकि, इसने मानचित्र को निरंतर पुनर्निर्मित करने का कारण बना दिया क्योंकि ऐसा लगता है कि मानचित्र पर होने वाली किसी भी एनीमेशन (मुझे अनुमान है) मानचित्र को स्वयं को फिर से निकालने का कारण बनता है। इसका सरल समाधान इसके बजाए दृश्यता को सेट करना है। जैसे यह परिवर्तन:

ProgressBar loadingIcon = (ProgressBar) findViewById(R.id.loadingIcon); 
... 
//Network data now finished loading... 
loadingIcon.setVisibility(View.INVISIBLE); 
इस के लिए

:

loadingIcon.setVisibility(View.GONE); 

जो यह नक्शे से पूरी तरह से निकाल देता है, अब इस पर एनिमेट होने और इसलिए ड्रॉ का कारण नहीं है() अनिश्चित काल के लिए एक कहा जाता है।

+0

धन्यवाद इसे पोस्ट करने के लिए बहुत कुछ - आपने बस एक समस्या हल की जो मुझे पागल कर रही थी। –

0

मुझे पता है कि यह एक पुरानी समस्या है, लेकिन मुझे अभी इसका सामना करना पड़ा। यह एक "इसके लायक है" पोस्ट है।

ड्रॉ लूप मेरे हिस्से पर एक कोडिंग त्रुटि साबित हुआ। दस्तावेज़ के मुताबिक, यदि ड्रॉ रूटीन सच हो जाता है, तो यह तत्काल अपडेट मांग रहा है। यदि झूठा लौटाया जाता है, तो प्रत्येक ओवरले के लिए केवल दो पास किए जाते हैं; छाया छाया के लिए एक और छाया झूठ के लिए एक। मैं सच लौट रहा था जिसके परिणामस्वरूप निरंतर अद्यतन हुआ। झूठी लौटने के बाद, प्रति ओवरले केवल दो पास हुए। कोई लूप नहीं

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