Как нарисовать уникальные метки на оверлейном элементе mapview в android - PullRequest
4 голосов
/ 07 марта 2011

Вот скриншот чего-то, чего я пытаюсь достичь

enter image description here

Я хотел бы добавить уникальный ярлык (например, цифры) к каждому наложенному элементу карты. Я сделал основную часть добавления оверлейных элементов и показа их на карте. Но это где я застрял надолго

1 Ответ

6 голосов
/ 22 марта 2011

Вы можете добавить OverlayItem с разными маркерами на одном и том же ItemizedOverlay, используя функцию:

overlayItem.setMarker(drawable);

Чтобы это работало, вам нужно установить границы для Drawable:

Drawable icon1 = getResources().getDrawable(R.drawable.icon1);
Drawable icon2 = getResources().getDrawable(R.drawable.icon2);
icon1.setBounds(0, 0, icon1.getIntrinsicWidth(), icon1.getIntrinsicHeight());
icon2.setBounds(0, 0, icon2.getIntrinsicWidth(), icon2.getIntrinsicHeight());
OverlayItem item1 = new OverlayItem(new Point(48858290, 2294450), 
    "Tour Eiffel", "La tour Eiffel");
OverlayItem item2 = new OverlayItem(new Point(48873830, 2294800), 
    "Arc de Triomphe", "L'arc de triomphe");                        
item1.setMarker(icon1);
item2.setMarker(icon2);

Вам понадобится столько же растровых изображений, сколько и максимальное количество маркеров. Но это будет быстрее, чем динамическое рисование текста на растровых изображениях. Это мобильный телефон, процессоры не быстрые. Если вы все равно предпочитаете рисовать текст на растровом изображении, то есть это очень просто, вы можете сделать это так:

//get a reference on the ImageView 
ImageView iv = (ImageView)findViewById(R.id.myImage);

// load the marker image
Bitmap myRefBitmap = BitmapFactory.decodeResource(getResources(), 
    R.drawable.icon);

// create a mutable bitmap with the same size as the marker image
Bitmap myWrittenBitmap = Bitmap.createBitmap(myRefBitmap.getWidth(), 
    myRefBitmap.getHeight(), Bitmap.Config.ARGB_4444);

// create a Canvas on which to draw and a Paint to write text.
Canvas canvas = new Canvas(myWrittenBitmap);
Paint txtPaint = new Paint();
txtPaint.setColor(Color.RED);
txtPaint.setTextSize(12);
txtPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
txtPaint.setTypeface(Typeface.DEFAULT_BOLD);

//draw ref bitmap then text on our canvas
canvas.drawBitmap(myRefBitmap, 0, 0, null);
canvas.drawText("Droid", 5, 15, txtPaint);

// set the new written bitmap into the ImageView
iv.setImageBitmap(myWrittenBitmap);
...