2013-01-31 14 views
6

मैं एंड्रॉइड Google मानचित्र एपीआई के संस्करण 1 से संस्करण 2 में एक एंड्रॉइड एप्लिकेशन को अपग्रेड कर रहा हूं। मेरे संस्करण 1 कोड में, मैं ड्रॉ() विधि को ओवरराइड करके आइटमइज्ड ओवरले के मेरे उप-वर्ग में सीधे मानचित्र पर टेक्स्ट खींचने में सक्षम था। जिस पाठ को मैं आकर्षित करना चाहता हूं वह गतिशील है, एक अतिरिक्त टेक्स्ट आइटम जिसे मैं प्रत्येक मानचित्र मार्कर के बगल में प्रदर्शित करना चाहता हूं, इसलिए टेक्स्ट को अक्सर जोड़ा/हटा दिया जाएगा क्योंकि विभिन्न प्रतीकों को प्लॉट/हटा दिया जाता है।Google मानचित्र पर टेक्स्ट ड्रा अब संभव नहीं है?

@Override 
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, 
     long when) { 
    if (!shadow) {    
      canvas.drawText("some text", (float) point.x + TextOffsetX , (float) point.y + TextOffsetY, m_paint); 
    } 


    return super.draw(canvas, mapView, shadow, when); 
} 

हालांकि, यह एपीआई के संस्करण 2 में संभव नहीं लगता है। यह वास्तव में ItemizedOverlays की अवधारणा नहीं है और कुछ भी subclassed किया जा सकता है। क्या नया तरीका है कि मैं नए एपीआई संस्करण में GoogleMap पर टेक्स्ट खींच सकता हूं?

+1

क्या आपने 'ग्राउंड ओवरले 'और' टाइल ओवरले 'देखा है? – CommonsWare

+0

मैंने कक्षाओं के विवरणों को देखा है। वे स्थैतिक छवियों को ओवरले करने के लिए प्रतीत होते हैं, न कि जिस उद्देश्य के लिए मैं खोज रहा हूं। –

+0

यह सच हो सकता है, लेकिन मुझे संदेह है कि या तो आपको उन कार्यों में से एक बनाने का कोई तरीका मिलेगा, या आप भाग्य से बाहर हैं। – CommonsWare

उत्तर

3

मुझे वही समस्या थी, v1 से v2 में अपग्रेड करने का प्रयास कर रहा था। अंततः मैंने एक मार्कर का उपयोग किया, पाठ के साथ एक बिटमैप बनाया, और इसे मार्कर के आइकन के रूप में इस्तेमाल किया।

सबसे पहले, आपको टेक्स्ट के साथ डी बिटमैप बनाना होगा। नोट: पाठ गुण (रंग, टाइपफेस, textalign, ...)

Rect boundsText = new Rect(); 
paintText.getTextBounds(strText, 0, strText.length(), boundsText); 
Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
Bitmap bmpText = Bitmap.createBitmap(boundsText.width(), boundsText.height(), conf); 

फिर, पाठ ड्राइंग के लिए कैनवास का उपयोग के साथ paintText कॉन्फ़िगर करें। यह कैनवास dimenssion के साथ थोड़ा सा पागलपन फिक्स पाठ है।

Canvas canvasText = new Canvas(bmpText); 
canvasText.drawText(strText, canvasText.getWidth()/2, canvasText.getHeight(), paintText); 

अंत में MarkerOption

MarkerOptions markerOptions = new MarkerOptions() 
    .position(latlngMarker) 
    .icon(BitmapDescriptorFactory.fromBitmap(bmpText)) 
    .anchor(0.5f, 1); 

में आइकन बनाने के लिए बिटमैप का उपयोग आशा है कि यह आपकी मदद कर सकता है।

+0

धन्यवाद! वह पूरी तरह से काम करता है। बस एक नोट: लाइन 'canvasText.getHeight(), paintNameBackground);' (2 डी ब्लॉक) गलत है - खराब प्रतिलिपि/पेस्ट? वैसे भी, मुझे नहीं पता कि इसका उद्देश्य क्या था लेकिन यह बिना ठीक चलाता है। – psycho

+0

आप सही @psycho थे, मैंने इसे बदल दिया, धन्यवाद! – jgonza73

+1

@ jgonza73 कौन सा वर्ग "पेंटटेक्स्ट" उदाहरण है? तुम इसे कैसे बनाते हो?, तुम यह कैसे बनाते हो? –

4

आप नीचे दिए गए कोड का उपयोग कर एक दृश्य से एक मार्कर बना सकते हैं:

public static Bitmap createDrawableFromView(Context context, View view) { 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
    view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels); 
    view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels); 
    view.buildDrawingCache(); 
    Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(bitmap); 
    view.draw(canvas); 

    return bitmap; 
} 

स्रोत: http://www.nasc.fr/android/android-using-layout-as-custom-marker-on-google-map-api/

संपादित करें: आप एक ही मार्कर की तुलना में अधिक उपयोग करते हैं, आप ऐसा नहीं करते हैं यह सुनिश्चित कर लें DisplayMetrics और प्रत्येक मार्कर के लिए सेटअप सामग्री (बिटमैप बिटमैप = ..... से ऊपर सब कुछ) देखें। इससे नाटकीय रूप से आपके ऐप को धीमा कर दिया जाएगा।

+2

मैंने इस समाधान की कोशिश की लेकिन यह बहुत धीमी है! – GeniDeveloper

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