2012-10-25 19 views
6

पृष्ठभूमिपथ() - स्मार्ट रंगीन क्षेत्रों

मैं एक आवेदन है कि एक नक्शे पर एक मार्ग को प्रदर्शित करता है (गूगल के नक्शे और OpenStreet नक्शे) का विकास। एक निर्गम उदाहरण bellow:

Path

ऊपर पथ मैं आकर्षित करने के लिए निम्नलिखित दृष्टिकोण का उपयोग कर:

private void drawWithoutElevation(Canvas canvas, Projection projection){ 
    if(rebuildRequired) 
     pathBuild(); 
    else{ //check if path need to be offset 
     if(offsetRequired){ 
      path.offset(offset.x, offset.y); 
     } 
    } 
    canvas.drawPath(path, paint); 
} 

दृष्टिकोण से ऊपर 10.000 अंक है, जो स्वीकार्य है आकर्षित करने के लिए 1.5ms के बारे में लेता है।

हालांकि, मैं बिंदु ऊंचाई के आधार पर विभिन्न रंगों का उपयोग करके पथ भी दिखाना चाहता हूं। एक निर्गम उदाहरण bellow:

दृष्टिकोण 1

:

Path 2

जैसा कि मैंने नहीं एक तरह से पथ खंड प्रति अलग रंग को परिभाषित करने के मिल सकता है, मैं निम्नलिखित दृष्टिकोण की कोशिश की है पथ में प्रत्येक बिंदु के बीच canvas.drawLine() का उपयोग करके सबसे स्पष्ट समाधान। उदाहरण bellow:

private void drawWithElevation(Canvas canvas, Projection projection){ 
    for(int i=1; i<geoArrList.size(); i++){ 
      paint.setColor(geoArrList.get(i)); 
      canvas.drawLine(pPrev.x, pPrev.y, p1.x, p1.y, paint); 
      pPrev.set(p1.x, p1.y); 
     } 
    } 
} 

यह 10000 अंकों के लिए लगभग 80ms के बहुत ही निराशाजनक समय में परिणाम देता है।

दृष्टिकोण 2

सेगमेंट असतत चरणों में ऊंचाई, और Path वस्तुओं, ऊंचाई खंड परिवर्तन प्रति एक की एक सूची का निर्माण। नीचे कोड उदाहरण:

private void drawWithElevation(Canvas canvas, Projection projection){ 
    if(rebuildRequired) 
     pathBuild(); 
    for(int i=0; i<pathSegments.size(); i++){ 
     if(needOffset){ 
      pathSegments.get(i).path.offset(offsetX, offsetY); 
     } 
     paint.setColor(pathSegments.get(i).color); 
     canvas.drawPath(pathSegments.get(i).path, paint); 
    } 
} 

यह 10000 अंकों के लिए लगभग 5ms के कम निराशाजनक समय में परिणाम देता है।

प्रश्न

हालांकि पिछले दृष्टिकोण एक महत्वपूर्ण सुधार, पहले एक की तुलना में पता चलता है, मैं आगे इसमें सुधार करना चाहते हैं।

क्या कोई अन्य दृष्टिकोण है जिसका उपयोग विभिन्न रंग प्रति सेगमेंट के साथ पथ को अधिक कुशल तरीके से (गति और/या स्मृति उपयोग) में आकर्षित करने के लिए किया जा सकता है?

आपके समय और आपकी सहायता के लिए धन्यवाद।

+0

5ms 200 fps है। क्या आप वाकई प्रदर्शन में सुधार करने के लिए _need_ हैं? यदि आप चाहते हैं कि यह तेज़ी से चलें क्योंकि आप प्लॉट करने जा रहे हैं उदा। 100k अंक, शायद समय की संख्या को कम करने का समय है, बशर्ते कि यह एक स्मार्टफोन स्क्रीन है, न कि 4 के स्क्रीन? – 9000

+0

धन्यवाद @ 9 000, आपके पास एक अच्छा बिंदु है ... इसे सुधारने की कोशिश करने के लिए चालक यह है कि उपयोगकर्ता कुछ अन्य ओवरले (कंपास, मार्कर, वर्तमान स्थान इत्यादि) के अलावा कई पथ जोड़ सकता है। मुझे इसके साथ रहने की आवश्यकता होगी :-) – Luis

उत्तर

1

Google द्वारा MyTracks के स्रोत को देखें, इससे कुछ प्रेरणा हो सकती है