46

जब मैं एक कस्टम बिटमैप से मार्कर जोड़ता हूं, तो मार्कर निर्दिष्ट बिंदु पर केंद्रित नहीं होता है।सेंटरिंग बिटमैप मार्कर (Google मानचित्र एंड्रॉइड एपीआई v2)

मैं इस तरह यह जोड़ रहा:

// ID tramo 
    final int tramoId = tr.getId(); 
    // Nodos 
    final Nodo[] nodos = tr.getNodos(); 

    final PolylineOptions p = new PolylineOptions(); 
    MarkerOptions m = new MarkerOptions(); 
    // Seteamos posicion de linea y marker 
    m.position(semisuma(nodos)); 
    for (final Nodo n : nodos) { 
     p.add(n.getLatLng()); 
    } 
    // Color de linea y marker 
    BitmapDescriptor icon = null; 
    if (tr.getCapacidad() == 0) { 
     p.color(0xFF000000); 
     m = null; 
    } else if (tr.getCapacidad() - tr.getPlazasOcupadas() == 0) { 
     p.color(0xEEFF0000); 
     final TextDrawable drawable = new TextDrawable(0, 0xEEFF0000, 
       0xFFFFFFFF); 
     icon = BitmapDescriptorFactory.fromBitmap(fromDrawable(drawable)); 
    } else { 
     p.color(0xEE00FFFF); 
     final TextDrawable drawable = new TextDrawable(0, 0xEE00FFFF, 
       0xFFFFFFFF); 
     icon = BitmapDescriptorFactory.fromBitmap(fromDrawable(drawable)); 
    } 
    if (m != null) { 
     m.title(String.valueOf(tramoId)); 
     m.icon(icon); 
    } 
    if (polylinesTramo.get(idTramo) != null) { 
     polylinesTramo.get(idTramo).remove(); 
    } 
    if (markersTramo.get(idTramo) != null) { 
     markersTramo.get(idTramo).remove(); 
    } 
    polylinesTramo.put(idTramo, map.getMap().addPolyline(p)); 
    if (marker != null) { 
     markersTramo.put(idTramo, map.getMap().addMarker(m)); 
    } 

यह TextDrawable का कोड है:

package com.cidaut.blueparking.ui; 

import android.graphics.Canvas; 
import android.graphics.ColorFilter; 
import android.graphics.Paint; 
import android.graphics.PixelFormat; 
import android.graphics.drawable.Drawable; 

public class TextDrawable extends Drawable { 

    private final String text; 
    private final Paint paint; 
    private final int centroX = 13; 
    private final int centroY = 16; 
    private final float textSize; 
    private final float whereToDrawX; 
    private final int bgColor; 

    public TextDrawable(final int text, final int bgColor, final int textColor) { 
     this(String.valueOf(text), bgColor, textColor); 
    } 

    public TextDrawable(final String text, final int bgColor, final int textColor) { 
     this.text = text; 
     this.bgColor = bgColor; 
     this.paint = new Paint(); 
     paint.setColor(textColor); 
     paint.setTextSize(14f); 
     paint.setAntiAlias(true); 
     paint.setFakeBoldText(true); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setTextAlign(Paint.Align.LEFT); 
     textSize = paint.measureText(text); 
     whereToDrawX = centroX - (textSize/2); 
    } 

    @Override 
    public void draw(final Canvas canvas) { 
     canvas.drawColor(bgColor); 
     canvas.drawText(text, whereToDrawX, centroY, paint); 
    } 

    @Override 
    public void setAlpha(final int alpha) { 
     paint.setAlpha(alpha); 
    } 

    @Override 
    public void setColorFilter(final ColorFilter cf) { 
     paint.setColorFilter(cf); 
    } 

    @Override 
    public int getOpacity() { 
     return PixelFormat.TRANSLUCENT; 
    } 
} 

और यहाँ fromDrawable विधि

protected Bitmap fromDrawable(final Drawable drawable) { 
    final Bitmap bitmap = Bitmap.createBitmap(25, 25, Config.ARGB_8888); 
    final Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    drawable.draw(canvas); 
    return bitmap; 
} 

मैं करने के लिए क्या जोड़ना चाहिए है मेरे कोड में केंद्रित मार्करों को पाने के लिए मेरा कोड?

उत्तर

132

बस आपके लिए 0.5 और 0.5 (आपके आइकन के बीच) के लिए एंकर पॉइंट सेट करें।

... 
MarkerOptions m = new MarkerOptions(); 
m.anchor(0.5f, 0.5f); 
... 

डिफ़ॉल्ट एंकर मूल्य (0.5f, 1.0f) है। आप marker here पढ़ सकते हैं।

+1

बिल्कुल सही .... मेरा दिन बचाया –

+1

ओह मेरे भगवान आदमी आप सबसे अच्छे हैं –

+0

आप एक जीवन बचतकर्ता हैं –

7

यदि आप Marker का उपयोग करते हैं तो आपको अपनी छवि को केन्द्रित करने के लिए एंकर को फिर से निर्दिष्ट करने की आवश्यकता होगी। जैसा कि प्रलेखन कहता है: "एंकर: छवि पर बिंदु जो मार्कर की LatLng स्थिति में रखा जाएगा। यह छवि के बाईं ओर और छवि के नीचे से 50% तक डिफ़ॉल्ट है।"

यदि आप डिफ़ॉल्ट रूप से छवि को केंद्रित करना चाहते हैं तो आपको मार्कर के बजाय ग्राउंड ओवरले का उपयोग करने पर विचार करना चाहिए। GroundOverlay देखें, "एंकर छवि के शीर्ष से 50% और छवि के बाईं ओर से 50% डिफ़ॉल्ट रूप से है।"

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