2013-01-31 19 views
6

Bir Android uygulamasını, sürüm 1'den android google maps API'sinin 2. sürümüne geçiriyorum. Sürüm 1 kodumda, aşağıdaki gibi draw() yöntemini geçersiz kılarak ItemizedOverlay alt sınıfımda doğrudan harita üzerinde metin çizebildim. Çizmek istediğim metin dinamiktir, her harita işaretçisinin yanında görüntülemek istediğim ek bir metin öğesidir, böylece farklı semboller çizilir/kaldırılırken metin sık sık eklenir/kaldırılır. Ancak, bu, API'nin 2. versiyonunda mümkün görünmemektedir. Bu kesinlikle bir ItemizedOverlays kavramı değildir ve hiçbir şey alt sınıflara ayrılmaz. Yeni API sürümünde GoogleMap'ta metin çizmenin bir yolu var mı?Metin Çizme artık Google Map'de mümkün değil mi?

+1

'GroundOverlay 've' TileOverlay''a baktınız mı? – CommonsWare

+0

Sınıfların açıklamalarına baktım. Görünüşe göre, statik görüntüleri üst üste koymak için geliyorlar ve aradığım amaç için değil. –

+0

Bu doğru olabilir, ama ya bu işlerden birini yapmanın bir yolunu bulacağınızdan şüpheliyim, ya da şansın kalmadı. – CommonsWare

cevap

3

Aynı sorun vardı, v1'den v2'ye yükseltmeye çalışıyorum. Sonunda bir işaretleyici kullandım, metinle bir Bitmap oluşturdum ve onu işaretleyicinin simgesi olarak kullandım.

Her şeyden önce, metin ile de Bitmap oluşturmalısınız. Not: Metin özellikleri (renk, yazı tipi, 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); 

Sonra metin çizim için Tuval kullanmak ile paintText yapılandırın. Bu tuval dimension ile biraz çılgınlık düzeltme metni.

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

Nihayet size yardımcı olabilecek Umut

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

MarkerOption

simgeyi oluşturmak için Bitmap kullanın.

Aşağıdaki kodu kullanarak Görünümü bir Marker oluşturabilir
+0

Teşekkürler! Bu mükemmel çalışıyor. Sadece bir not: "canvasText.getHeight(), paintNameBackground) satırı;' (2d blok) yanlış - hatalı kopyala/yapıştır? Neyse, amacının ne olduğunu bilmiyorum ama gayet iyi çalışıyor. – psycho

+0

Haklıydınız @psycho, değiştirdim, teşekkürler! – jgonza73

+1

@ jgonza73 Hangi sınıf "paintText" örneğidir? Bunu nasıl yapıyorsun? –

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; 
} 

Kaynak: http://www.nasc.fr/android/android-using-layout-as-custom-marker-on-google-map-api/

düzenleme: Tek bir işaretleyici daha kullanırsanız, yapmayın emin olun DisplayMetrics ve her işaretçi için kurulum öğelerini (Bitmap bitmap = ..... üzerindeki her şey) görüntüleyin. Bu, uygulamanızı önemli ölçüde yavaşlatır.

+2

Bu çözümü denedim ama çok yavaş! – GeniDeveloper

İlgili konular